我想使用INNER JOIN语句加入一些表。其中一些表具有多对多的关系,一对一对多,一对一对一。我想知道INNER JOIN-s语句的顺序是否重要,是否与重新关系的类型(一对一,一对多等)相关?那么以下这三个代码输出的结果是否相同?
SELECT ....
FROM table1
INNER JOIN (table2 INNER JOIN table3 ON table2.col=table3.col)
ON table1.col=table2.col
SELECT ....
FROM table1
INNER JOIN (table2 INNER JOIN table3 ON table2.col=table3.col)
ON table1.col=table3.col
SELECT ....
FROM table2
INNER JOIN (table1 INNER JOIN table3 ON table1.col=table3.col)
ON table3.col=table2.col

SELECT ...
FROM table1,table2
WHERE (table1.col=table2.col)

答案 0 :(得分:1)
加入的确切顺序无关紧要。
最好使用
$ cpp -o preprossed_temp.c temp.c
是的,INNER JOIN可以替换为
select ...
from table1
inner join table2 on table2.col=table1.col
inner join table3 on table3.col=table1.col
而SQL计划将是一样的。 但如果其他过滤器处于条件 - 将会混合。
此外,如果有其他连接条件 - 最好先过滤掉所有不需要的记录。
答案 1 :(得分:0)
结果完全没有区别。因为您只使用内部联接,所以只显示所有三个表中的匹配项。
如果要在一个查询中使用LEFT OUTER join和INNER join,则可以改变结果集。
答案 2 :(得分:0)
对于INNER JOIN,它将给出相同的结果,但是对于其他类型的连接,它将给出不同的结果。 例如:
SELECT ....
FROM table1
LEFT JOIN (table2 INNER JOIN table3 ON table2.col=table3.col)
ON table1.col=table2.col
上面的相当于
SELECT ....
FROM table1
LEFT JOIN (
Select table2.col
From table2 INNER JOIN table3 ON table2.col=table3.col
) tbl
ON table1.col=tbl.col
首先它将执行table2&的INNER JOIN。 table3然后table1将与结果
连接