如何在一个查询中计算两个表的行数?

3
我知道如果两个表中的列数相等,可以在select语句中使用UNION。此外,另一种选择是在select子句中使用子查询。还有什么其他选项可以使用吗?
示例:
tabel1  table2
id  1       1 
    2       2
    3       3

我需要通过一次查询获取两个表的总行数:

...COUNT(table1.id) as tbc1, COUNT(table2.id) as tbc2...

请编辑您的问题并包含样本数据和期望结果。目前写得不清楚您在询问什么。 - Gordon Linoff
2个回答

3

使用子查询,如果需要添加 FROM DUAL

SELECT 
    (SELECT COUNT(*) FROM TABLE1) As Table1Count, 
    (SELECT COUNT(*) FROM TABLE2) As Table2Count
[FROM DUAL]

[FROM DUAL] 应该替换成什么? - Sahe
@Sahe,你的selectfrom之间有两个子查询,我没有你完整的查询语句,FROM DUAL是为了测试。 - shA.t

2
如果你在这两个表之间做一个交叉连接,你会得到比实际需要更多的行。你将得到这些表的笛卡尔积,因此行数将是表一中的数量乘以表二中的数量。
然而,如果你对这两个表的id值进行聚合,可以使用“COUNT(distinct [column])”来执行交叉连接。
试试这个:
SELECT COUNT(distinct t1.id) + COUNT(distinct t2.id) AS totalRows
FROM firstTable t1, secondTable t2;

此查询计算来自第一个表的不同id值的数量(基本上是行数),并将其与第二个表中的行数相加。它在SQL Fiddle中有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接