SQL Union显示错误的结果

时间:2017-03-22 07:50:06

标签: sql database postgresql select

SELECT COUNT(id)
FROM table1
UNION
SELECT COUNT(id)
FROM table2
UNION
SELECT COUNT(id)
FROM table3

结果是

247811

58599

76

但实际上

table1有 247811

table2有 76

table3有 58599

2 个答案:

答案 0 :(得分:2)

union运营商对订单不做任何保证。如果要以特定方式对结果进行排序,则必须使用order by子句明确地执行此操作。另请注意,union会删除重复项,因此您最好使用union all。 E.g:

SELECT   cnt
FROM     (SELECT 't1', COUNT(id) FROM table1
          UNION ALL
          SELECT 't2', COUNT(id) FROM table2
          UNION ALL
          SELECT 't3', COUNT(id) FROM table3) t
ORDER BY 1 ASC

答案 1 :(得分:1)

如果您的问题取决于order by,请order by选择union,如果您有计数问题?(在您的示例中有不同的计数79和76)取决于您使用的count(id) count(*)不相同,count(id)会忽略null列中的每个Idcount(*)它是你的表行