【发布时间】:2014-05-04 12:29:30
【问题描述】:
我在下面有一个用非 ansi 编写的查询,我正在转换为 ansi 以便从 SQL 2008 迁移到 2012。问题是以下查询的计数不匹配。
Select count(*)
FROM t1 ,t2 ,t3,t4,t5
WHERE t3.RequestId = t1.GenRequestId
AND t1.RequestType = 'xxx'
AND t4.RequestId =* t3.RequestId
AND t4.ItemTypeId =* t2.ItemTypeId
AND t1.managerid *= t5.managerid
Select count(*)
FROM t1
LEFT JOIN t5 ON t1.managerid = t5.managerid,
t4
RIGHT JOIN t3 ON t4.RequestId = t3.RequestId
RIGHT JOIN t2 ON t4.ItemTypeId = t2.ItemTypeId
WHERE t3.RequestId = t1.GenRequestId
AND t1.RequestType = 'xxx'
在使用连接时我想要相同的计数。感谢您的帮助..!!
【问题讨论】:
-
LEFT/RIGHT JOIN 和 INNER JOIN (t1,t2..) 不一样。
-
如果涉及外连接,则连接操作的顺序是相关的。您无法更改它们并期望得到相同的结果:首先是 t1 和 t3 的内连接,然后是 t4 和 t3 的右连接,接下来是 t4 和 t2 的右连接,最后是 t1 和 t5 的左连接。
-
添加到 Ejay 的评论 - 我也没有在您的第二个查询中看到加入 t4
标签: sql sql-server sql-server-2008 join