为多个 id 中的每一个计算多个表上的行数

Count Rows on multiple tables for each of multiple ids

我写了一个 sql 查询来计算(在三个 table 上)与 Id 相关的行:

SELECT 
(SELECT `Id` FROM `Tab1` WHERE `Id` = '1') AS ID, 
(SELECT COUNT(*) FROM `tab1` WHERE `Id` = '1') AS RowsTab1,
(SELECT COUNT(*) FROM `tab2` WHERE `Id` = '1') AS RowsTab2,
(SELECT COUNT(*) FROM `tab3` WHERE `Id` = '1') AS RowsTab3

但是我需要在一个 ID 数组上使用它,以便查询结果是一个 table,它显示对于每个 ID,三个 table 中的每一个有多少行。

结果应该是这样的:

ID    RowsTab1     RowsTab2     RowsTab3
 1        2            4            2
 2        3            0            8
 5        0            2            4

等等

有没有办法只用一次查询就可以做到?

我想澄清一下,将使用 Excel - VBA

执行查询

提前致谢

您可以使用相关子查询获得您想要的计数。然后您需要 ids 的源,您可以将其放入子查询中。像这样:

select ids.id,
       (select count(*) from tabl where tabl1.id = ids.id) as tab1_cnt,
       (select count(*) from tab2 where tabl2.id = ids.id) as tab2_cnt,
       (select count(*) from tab3 where tabl3.id = ids.id) as tab3_cnt
from (select 1 as id union all select 2 union all select 5) as ids

如果您关心的 ID 已经在 table 中,那么您可以直接使用那个 table。

如果我理解正确,这应该可以解决您的问题:

SELECT Tab0.id,
(SELECT COUNT(*) FROM `tab1` WHERE `Id` = Tab0.Id) AS RowsTab1,
(SELECT COUNT(*) FROM `tab2` WHERE `Id` = Tab0.Id) AS RowsTab2,
(SELECT COUNT(*) FROM `tab3` WHERE `Id` = Tab0.Id) AS RowsTab3
FROM Tab0 WHERE field1 = 'myvalue'