加入后TSQL重复[奇怪的语法]

xer*_*him 1 t-sql sql-server sql-server-2008

在我们古老的TSQL程序之一中,我发现这种结构会导致业务规则错误:

SELECT TOP 100 * 
FROM dbo.Table1 AS t1
LEFT JOIN dbo.Table2 AS t2
JOIN dbo.Table3 AS t3
       ON t3.c1 = t2.c1
       ON t2.c2 = t1.c2
Run Code Online (Sandbox Code Playgroud)

我将使用的正常语法是

SELECT TOP 100 * 
FROM dbo.Table1 AS t1
LEFT JOIN dbo.Table2 AS t2
    ON t2.c2 = t1.c2
JOIN dbo.Table3 AS t3
    ON t3.c1 = t2.c1
Run Code Online (Sandbox Code Playgroud)
  • 这个JOIN... ON... ON语法究竟是什么?
  • 这是一个交叉连接因为这on句话太迟了吗?
  • 为什么我在两个查询之间得到不同的结果?

提前致谢

Zoh*_*led 5

用括号读取更容易:

SELECT TOP 100 * 
FROM dbo.Table1 AS t1
LEFT JOIN 
    (
    dbo.Table2 AS t2
    JOIN dbo.Table3 AS t3
       ON t3.c1 = t2.c1
    )
    ON t2.c2 = t1.c2
Run Code Online (Sandbox Code Playgroud)

不,这不是交叉连接.
您得到的结果不同,因为您的第二个查询执行左连接,然后是内连接,但第一个查询首先执行内连接.