我有几个详细信息表的主表。我需要检查每个详细信息表是否包含给定ID的任何行。现在我正在浏览所有表格并检查计数是否> 0但是必须有更好的方法。
SELECT COUNT(*) FROM Table1 WHERE ID=3;
SELECT COUNT(*) FROM Table2 WHERE ID=3;
...
SELECT COUNT(*) FROM TableN WHERE ID=3;
有没有办法在一个有效的SQL语句中执行此操作?
答案 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;
我没有看到不扫描所有表格的方法,如果那是您要避免的。