如何检查多个表是否具有给定ID的行

时间:2013-10-25 14:16:22

标签: sql

我有几个详细信息表的主表。我需要检查每个详细信息表是否包含给定ID的任何行。现在我正在浏览所有表格并检查计数是否> 0但是必须有更好的方法。

SELECT COUNT(*) FROM Table1 WHERE ID=3;
SELECT COUNT(*) FROM Table2 WHERE ID=3;
...
SELECT COUNT(*) FROM TableN WHERE ID=3;

有没有办法在一个有效的SQL语句中执行此操作?

3 个答案:

答案 0 :(得分:1)

WITH CTE AS 
(
SELECT 'T1' AS Name, COUNT(*) AS Total FROM Table1 WHERE ID=3
UNION ALL
SELECT 'T2' AS Name, COUNT(*) AS Total  FROM Table2 WHERE ID=3
UNION ALL
...
UNION ALL
SELECT 'Tn' AS Name, COUNT(*) AS Total FROM TableN WHERE ID=3;
)
Select * from CTE where Total > 0

答案 1 :(得分:1)

这听起来像你的桌子设计不佳。我认为你需要组合一些表或添加一个可以查询的桥表。

或者,如果您的结构是最佳的,请继续查询各个表,并让您的应用程序处理运行每个表。

答案 2 :(得分:0)

如果您真的想要一个结果集,您可以这样做:

DECLARE @ID INT
SET @ID = 3

SELECT 'Table1' TableName, COUNT(*) FROM Table1 WHERE ID=@ID;
UNION
SELECT 'Table2' TableName, COUNT(*) FROM Table2 WHERE ID=@ID;
UNION
...
UNION
SELECT 'TableN' TableName, COUNT(*) FROM TableN WHERE ID=@ID;

我没有看到扫描所有表格的方法,如果那是您要避免的。