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句话太迟了吗?提前致谢
用括号读取更容易:
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)
不,这不是交叉连接.
您得到的结果不同,因为您的第二个查询执行左连接,然后是内连接,但第一个查询首先执行内连接.