为多个 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'
我写了一个 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'