在进行外连接时,是重要的表的顺序还是ON子句的顺序?
例如是
FROM TABLEA A
LEFT JOIN TABLEB B ON A.id = B.id
与
相同FROM TABLEA A
LEFT JOIN TABLEB B ON B.id = A.id
如果你有多张桌子怎么样?如果许多中的第一个表是您想要的所有行而不管LEFT JOIN
子句,那么它是ON
吗?
例如,
FROM TABLEA A
LEFT JOIN TABLEB B ON A.id = B.id
LEFT JOIN TABLEC C ON C.ID = A.ID
它是否需要来自TABLEA
的所有行,因为它位于表格列表的左侧或来自C
的行,因为它位于ON
子句的左侧?< / p>
答案 0 :(得分:1)
// trying to access a file directly?
if ($is_file) {
// TODO: manage served files (gzip, minify, etc.)
// is it an allowed extension?
if (!is_array($CONFIG['allow_ext_access']) || !in_array($type, $CONFIG['allow_ext_access']))
die('access denied');
// it's not *this* file is it?
if (!$is_index) {
// try to get known file type
$file_type = isset($CONFIG['file_types'][$type]) ? $CONFIG['file_types'][$type] : false;
// if we have a file type we can properly pass it as what it is
if ($file_type) {
header('Content-Type: '.$file_type['mime']);
}
// execute php file or just output any other file
if ($type == 'php') @include($path);
else @readfile($path);
die;
}
}
// if it's not this file, then it's a path and a URL for re-routing
表示取左侧的表(指定的第一个表),并连接右表(指定的第二个)中的行。它会根据LEFT JOIN
条件ON
加入他们。由于true
条件只需要ON
,因此它的编写方式根本不重要,它只是一个被评估的表达式。
true
确保左侧表格中的每一行都会被保留,如果没有行可以从右侧的表格中加入LEFT JOIN
,则会与NULL
联接。这意味着表的顺序肯定很重要。
如果表格顺序颠倒了,并且只有两个表格,则RIGHT JOIN
会产生相同的效果(即保留指定的第二个表格中的行)。
答案 1 :(得分:0)
FROM TABLEA A LEFT JOIN TABLEB B ON A.id=B.id LEFT JOIN TABLEC C ON C.ID=A.ID
FROM TABLEA A LEFT JOIN TABLEB B ON B.id=A.id LEFT JOIN TABLEC C ON A.ID=C.ID
这两者都会返回相同的结果。
FROM TABLEA A LEFT JOIN TABLEB B ON B.id=A.id LEFT JOIN TABLEC C ON B.ID=C.ID
这可能会也可能不会返回相同的结果,具体取决于表b和表C中实际存在的数据,因为表C与表b没有直接关系到表A.我个人总是把它视为不同的定义而不是第一组连接,如果是在同一时间是偶然的。
当编写多个连接时,特别是当你有外连接时,我个人觉得首先从父表开始(通常是你想要的在连接的左边)并添加任何其他内连接表是有帮助的在做左连接之前。如果我有子孙表(副多子表),那么我会尝试按父母,子女,孙子的降序排列,以明确与什么有关。