sql - 未使用自己的键连接表时的连接行为

标签 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 之间执行交叉连接?

最佳答案

因为它是一个永远为真的条件,所以它等价于:

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

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

关于sql - 未使用自己的键连接表时的连接行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13847820/

相关文章:

sql - T-SQL 中的 case 语句中断

sql - 并行插入到单个表的最快方法

python - 如何以编程方式为 Django 中的给定模型生成 CREATE TABLE SQL 语句?

SQL Management Studio 无法将表/对象从资源管理器拖动到查询编辑器

mysql - 特定时间间隔的查询结果

sql-server - EXECUTE AS USER 对数据库中请求的用户 dbo 失败

sql-server - 类型提供程序无法连接到 localDB

sql-server - 如何创建实用程序存储过程并像其他 sp_... 实用程序一样运行它

tsql - 需要在 SELECT DISTINCT 中使用 COLLATION

sql-server-2008 - 如何在sql server中获取存在于多个类别中的产品