sql-server - 与多个 ON 的连接是什么意思?

标签 sql-server tsql

我在我们的一个数据库中发现一个 View 在 LEFT OUTER JOIN 之后有多个 ON 语句。我不知道这是有效的 TSQL,我对它的含义更加困惑?

最佳答案

FROM 中的 ON 子句强制连接顺序。

如果像这样表达

A LEFT JOIN B on A.id = B.id JOIN C on b.id = c.id

你想先做B INNER JOIN C,然后做OUTER JOIN,可以用括号

A LEFT JOIN (B JOIN C on b.id = c.id) on A.id = B.id

不需要括号,可以一个接一个写ON

A LEFT JOIN B JOIN C on b.id = c.id on A.id = B.id

ON 子句应该是交叉关系(first-last,second - one before last 等)

它就像2 + 2 * 2。如果预期结果是8,你必须写成(2 + 2) *2 或使用逆波兰符号来避免歧义,2 2 + 2 *。括号更容易被人类理解,但很少使用。当我看到连续几个没有括号的ON时,通常是自动生成的代码。

关于sql-server - 与多个 ON 的连接是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28432386/

相关文章:

mysql - 这可能是w/SQL吗?

sql - 在T-SQL的日期时间字段上使用类似LEAST的方法

sql - NULL 上的不等于 <> != 运算符

mysql - 将父子数据复制到另一个具有不同父子id的表

php - 无法在 PHP 中连接到远程 SQL 数据库,但已设置远程访问并确认可以正常工作

c# - 为什么 Entity Framework (EF 6.0)会生成 View 而不是用于链接表的表,而导致插入失败?

java - 如何以编程方式在表之间传输大量数据?

sql - 引用上一行中的值

sql-server - 查询子查询

mysql - 编写如何删除扩展名并放入单独列的脚本