Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL与所有在末尾收集的ON语句连接_Sql Server_Join - Fatal编程技术网

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中都被接受(尽管有些需要括号,有些不需要),