2013-10-25 82 views
0

我擁有包含多個詳細信息表的主表。我需要檢查每個細節表是否有給定ID的任何行。現在我正在瀏覽所有的表格,並檢查count> 0,但是必須有更好的方法。如何檢查多個表是否有給定ID的行

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

有沒有辦法在一個有效的SQL語句來做到這一點?

+1

這些表格是如何關聯的?通過您的原始帖子,他們只是隨機表,可能不具有相同的結構。 – Miles

+0

你想完成什麼?你是否試圖避免掃描所有表,減少重複的代碼,或只獲得一個結果集? –

+0

表是相關的。主表具有主鍵ID。詳細信息表具有外鍵Table1.ID。 –

回答

0

如果你真的想要一個結果集你可以這樣做:

DECLARE @ID INT 
SET @ID = 3 

SELECT 'Table1' TableName, COUNT(*) FROM Table1 WHERE [email protected]; 
UNION 
SELECT 'Table2' TableName, COUNT(*) FROM Table2 WHERE [email protected]; 
UNION 
... 
UNION 
SELECT 'TableN' TableName, COUNT(*) FROM TableN WHERE [email protected]; 

我沒有看到一個方法來掃描所有的表,如果這就是你要躲避什麼。

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 
+0

他仍然必須經過所有桌子,這正是他想要避免的。 –

1

這聽起來像是你的桌子設計不好。我認爲你需要組合一些表格或添加一個可以查詢的橋表。

或者,如果您的結構是最優的,並且只是讓您的應用程序處理運行每個表,那麼請繼續查詢各個表。

相關問題