多个INNER JOIN-s的顺序是否与表相关联?

时间:2016-02-08 11:02:56

标签: sql-server join

我想使用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



 我可以用下面的代码替换两个表的INNER JOIN吗?那么下面的代码是否表示表1和table2的内连接?



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




3 个答案:

答案 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将与结果

连接