我在我们的应用程序中尝试了这些查询。每个都为我返回了不同的结果集。
查询集1
SELECT *
FROM TABLE1 T1
LEFT OUTER JOIN TABLE2 T2 ON (T1.ID = T2.ID
AND T1.STATUS = 'A'
AND T2.STATUS = 'A')
INNER JOIN TABLE3 T3 ON (T2.ID = T3.ID)
WHERE T3.STATUS = 'A'
查询集2
SELECT *
FROM TABLE1 T1
LEFT OUTER JOIN TABLE2 T2 ON (T1.ID = T2.ID
AND T2.STATUS = 'A')
INNER JOIN TABLE3 T3 ON (T2.ID = T3.ID)
WHERE T3.STATUS = 'A'
AND T1.STATUS = 'A'
我无法找出每个查询返回不同输出的原因。另请指导我使用多个joins
(left, right, Inner)
与Filtering clauses.
感谢您的帮助
答案 0 :(得分:1)
在第一个
SELECT *
FROM TABLE1 T1
LEFT OUTER JOIN TABLE2 T2 ON (T1.ID = T2.ID
AND T1.STATUS = 'A'
AND T2.STATUS = 'A')
INNER JOIN TABLE3 T3 ON (T2.ID = T3.ID)
WHERE T3.STATUS = 'A'
AND T1.STATUS ='A'效果为零 这是一个左连接 - 你需要获得所有的T1期
当您将T1.STATUS ='A'移动到应用的位置时
答案 1 :(得分:0)
您在左连接的右表上放置一个过滤器,创建一个内连接。您的第一个查询将返回较少的结果,而您的第二个查询将在右表中针对不匹配的行进行NULLS。这个链接帮助我更好地理解了连接,因为我很长时间都在努力去理解这个概念。 HERE
如果我的答案不明确,请向我索要修改。
答案 2 :(得分:0)