使用自己的密钥连接表时加入行为

时间:2012-12-12 20:12:30

标签: sql sql-server tsql

如果我有查询:

SELECT * 
FROM Table1 a
Inner Join Table2 b on a.Key = b.Key
Inner Join Table3 c on a.Key = b.Key

发生了什么事?我最近在一些代码中犯了这个错误(希望在a.Key = c.Key上加入c),当我发现并修复它时,我很惊讶它被允许执行并获得结果。

我很好奇在调用这样的查询时会发生什么。据我所知,它执行(table1 join table2)和table3?

之间的交叉连接

1 个答案:

答案 0 :(得分:4)

因为这是一个始终为真的条件,所以它等同于:

 SELECT * FROM Table1 a 
 Inner Join Table2 b on a.Key=b.Key
 Inner Join Table3 c on 1=1
   ;

,例如(t1 join t2)* t3的笛卡尔积。