0

我正在尝试从差异表中进行多项选择,并且只在一列中得到结果。

SELECT COUNT(*) FROM tb1 union
SELECT COUNT(*) FROM tb2 union
SELECT COUNT(*) FROM tb3;

输出应该是这样的:

 593643
 18103600
 0

问题在于结果是按 desc 顺序排列的。如下所示:

 0
 593643
 18103600

我希望结果与我放置 select 语句时一样。请指教。顺便说一句,我正在使用 teradata。谢谢你。

4

2 回答 2

5

SQL 结果集本质上是无序的,除非您明确指定order by子句。您可以使用子查询来执行此操作:

select cnt
from ((SELECT COUNT(*) as cnt, 1 as ord FROM tb1)
      union all
      (SELECT COUNT(*), 2 FROM tb2)
      union all
      (SELECT COUNT(*), 3 FROM tb3)
     ) t
order by ord
于 2013-05-08T23:29:25.983 回答
3

如果您想要特定的顺序,请添加ORDER BY子句。使用它也很好,UNION ALL因此您总是得到 3 行,即使结果重复(两个表具有相同的行数):

SELECT 'tbl1' AS tablename, COUNT(*) AS cnt, 1 AS ord FROM tb1 UNION ALL
SELECT 'tbl2', COUNT(*), 2 FROM tb2 UNION ALL
SELECT 'tbl3', COUNT(*), 3 FROM tb3
ORDER BY ord ;
于 2013-05-08T23:26:55.513 回答