我擁有包含多個詳細信息表的主表。我需要檢查每個細節表是否有給定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語句來做到這一點?
我擁有包含多個詳細信息表的主表。我需要檢查每個細節表是否有給定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語句來做到這一點?
如果你真的想要一個結果集你可以這樣做:
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];
我沒有看到一個方法來不掃描所有的表,如果這就是你要躲避什麼。
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
他仍然必須經過所有桌子,這正是他想要避免的。 –
這聽起來像是你的桌子設計不好。我認爲你需要組合一些表格或添加一個可以查詢的橋表。
或者,如果您的結構是最優的,並且只是讓您的應用程序處理運行每個表,那麼請繼續查詢各個表。
這些表格是如何關聯的?通過您的原始帖子,他們只是隨機表,可能不具有相同的結構。 – Miles
你想完成什麼?你是否試圖避免掃描所有表,減少重複的代碼,或只獲得一個結果集? –
表是相關的。主表具有主鍵ID。詳細信息表具有外鍵Table1.ID。 –