此查询是否像交叉连接一样工作?

时间:2017-03-03 04:50:07

标签: sql-server

我正在尝试运行此查询,但无法理解其工作过程。

SELECT *
FROM TABLE1 T1
INNER JOIN TABLE2 T2 ON T1.ID = T2.ID
LEFT JOIN TABLE1 T3 ON T1.ID = T2.ID

table1包含3个连续ID为1,2,3的记录,table2包含4个连续ID为1,2,3,4的记录 还有一件事我还想知道,这个查询是从右到左执行的?我的意思是左连接过程首先执行然后内部连接?我根据查询执行计划说这个。

2 个答案:

答案 0 :(得分:3)

这是您当前的查询:

SELECT *
FROM table1 t1
INNER JOIN table2 t2
    ON t1.id = t2.id
LEFT JOIN table1 t3
    ON t1.id = t2.id

第一次加入只是table1table2之间的正常内联接。第二个连接是左连接,但ON条件是多余的,我相信即使存在这种情况,行为也是相同的。这样做的原因是,对于中间表中的每个记录,连接条件t1.id = t2.id在查询中的该点始终为真。因此,第二次加入似乎实际上是{strong>交叉加入与table1

通常,您的连接条件将涉及要连接的两个表。

答案 1 :(得分:2)

是的,它的工作方式就像交叉连接一样。如果这是你的意图,你应该正确地重写它。你在那里有什么误导和混淆(它是从哪里来的?)

 select * from table1 t1 
 inner join table2 t2 
 on t1.id=t2.id 
 cross join table1 t3 

评估表,过滤器,连接的顺序由查询计划决定(按CTRL-L)。这可能随时改变。你不应该担心这些命令的运行 - 你只需要知道无论它如何执行你都会得到相同的结果。如果查询规划器认为它会更快

,则可以选择一种方法而不是另一种方法