Sql server SQL与所有在末尾收集的ON语句连接
有人能解释一下这种连接的逻辑吗Sql server SQL与所有在末尾收集的ON语句连接,sql-server,join,Sql Server,Join,有人能解释一下这种连接的逻辑吗 SELECT 1 FROM TABLE1 t1 RIGHT JOIN TABLE2 t2 ON t1.ID = t2.ID1 RIGHT JOIN TABLE3 t3 INNER JOIN TABLE4 t4 ON t3.ID = t4.ID3 INNER JOIN TABLE5
SELECT 1
FROM TABLE1 t1
RIGHT JOIN TABLE2 t2
ON t1.ID = t2.ID1
RIGHT JOIN TABLE3 t3
INNER JOIN TABLE4 t4
ON t3.ID = t4.ID3
INNER JOIN TABLE5 t5
INNER JOIN TABLE6 t6
ON t5.ID = t6.ID5
INNER JOIN TABLE7 t7
INNER JOIN TABLE8 t8
INNER JOIN TABLE9 t9
INNER JOIN TABLE0 t0
ON t9.ID0 = t0.ID
ON t8.ID = t9.ID8
ON t7.ID = t9.ID7
ON t6.ID = t9.ID6
ON t4.ID9 = t9.ID
ON t2.ID6 = t6.ID
我希望它能变成这样
select 1
FROM TABLE1 t1
RIGHT JOIN TABLE2 t2 ON t1.ID = t2.ID1
INNER JOIN TABLE6 t6 ON t2.ID6 = t6.ID
INNER JOIN TABLE9 t9 ON t6.ID = t9.ID6
INNER JOIN TABLE4 t4 ON t4.ID9 = t9.ID
RIGHT JOIN TABLE3 t3 ON t3.ID = t4.ID3
INNER JOIN TABLE5 t5 ON t5.ID = t6.ID5
INNER JOIN TABLE7 t7 ON t7.ID = t9.ID7
INNER JOIN TABLE8 t8 ON t8.ID = t9.ID8
INNER JOIN TABLE0 t0 ON t9.ID0 = t0.ID
。。。但事实并非如此
有什么想法吗?它们不一样,因为紧接着 应在其上指定右连接、左连接或内部连接。(如果没有,它将类似于完全不同的交叉连接) 是的,上面的代码和下面的代码完全不同
此外,不能在多个列之后立即启用多个,如果要联接多个列,则应在任何ON子句之前使用内部联接。它们不相同,因为紧随其后 应在其上指定右连接、左连接或内部连接。(如果没有,它将类似于完全不同的交叉连接) 是的,上面的代码和下面的代码完全不同 此外,不能在多个列之后立即启用多个,如果要联接多个列,则应在任何ON子句之前使用内部联接。根据第180页的说明,ON子句是限定联接的一部分
ON
与JOIN
一起使用
你可以说,
join R on X join S on Y
但不要(像我一样)被你说不出的话所愚弄
join R join S on X on Y
因为,JOIN
是递归的,正如对的公认答案所解释的
在R join S
中,S
可以具有T join U
的形式,因此您得到的是
R在X上连接(在Y上连接S)
为指出正确答案,请向提供提示 根据,第180页,ON子句的是限定联接的一部分ON
与JOIN
一起使用
你可以说,
join R on X join S on Y
但不要(像我一样)被你说不出的话所愚弄
join R join S on X on Y
因为,JOIN
是递归的,正如对的公认答案所解释的
在R join S
中,S
可以具有T join U
的形式,因此您得到的是
R在X上连接(在Y上连接S)
为指出正确答案,请向提供提示 这是非常有效的标准SQL
FROM A
JOIN B
JOIN C
ON <<pred1>>
ON <<pred2>>
这是非常有效的标准SQL
FROM A
JOIN B
JOIN C
ON <<pred1>>
ON <<pred2>>
我也会这么想。但确实如此。它看起来像是从MS Access的旧副本中复制出来的东西;我不能解释它,但我会把它改写成ANSI标准,这样以后其他人可以阅读和修改它。@MartinSmith你能解释一下吗。这只是一种奇怪的交叉连接方式吗?我想换一个更传统的结构,但我不太明白它在做什么。这就是我的想法。但确实如此。它看起来像是从MS Access的旧副本中复制出来的东西;我不能解释它,但我会把它改写成ANSI标准,这样以后其他人可以阅读和修改它。@MartinSmith你能解释一下吗。这只是一种奇怪的交叉连接方式吗?我想换一个更传统的结构,但我不太明白它在做什么。它们都可以运行,但第一个很可能不是连接的最典型用法。第一个不带ON子句的会创建成吨的数据(类似于Cross Join),它们都可以运行,但第一个很可能不是最典型的连接用法。第一个不带ON子句的会创建成吨的数据(类似于Cross Join)。这个答案不正确。语法很好,在所有主要RDBMS中都可以接受(虽然有些需要括号,有些不需要),但这个答案是不正确的。语法很好,在所有主要RDBMS中都被接受(尽管有些需要括号,有些不需要),