我在这里弄错了我错的地方。 以下查询:
SELECT SUM(table1.col1) FROM table1
返回值 x 。
以下查询:
SELECT SUM(table1.col1) FROM table2 RIGHT OUTER JOIN table1 ON table2.ID = table1.ID
返回值 y 。 (我需要加入table2的其他数据)。为什么第二个示例返回的值与第一个不同?
答案 0 :(得分:3)
通过暂时忽略RIGHT OUTER JOIN的存在,让自己,支持代码的同事以及客户的生活变得更轻松。使用Table1作为“from table”而不是table2。
然后,如果聚合,您通常会发现在加入之前必须这样做,以便数字准确。 e.g。
SELECT T1.SUMCOL1
FROM (
SELECT id, SUM(col1) as SUMCOL1 FROM Table1 GROUP BY id
) T1
LEFT OUTER JOIN table2 T2 on T1.id = T2.ID
答案 1 :(得分:1)
明显的答案是因为table2
对table1
来说很多。也就是说,table2
中有一个table1
中的一个ID有多行。如果table1
中不存在id
,您也可能会从table2
中删除行。
比较:
SELECT COUNT(*) FROM table1
要:
SELECT COUNT(*) FROM table2 RIGHT OUTER JOIN table1 ON table2.ID = table1.ID
如果您得到的结果不同,则会汇总重复项或从table1
中删除行。
如果你想避免这种情况,你需要使用子查询。