2015-08-09 91 views
0

我想問一下如何編寫一個T-SQL查詢來檢查其他表是否存在一行並將數據插入一個臨時表。SQL Server:如何檢查一行是否存在於其他表中

例如,我有5個表main1table2,table3,table4table5。每個表格都有一個product_id列。

我需要main1.product_id(值A000到A010),以檢查他們是否在table2table3table4table5存在。

如果在table2中找到,值「A000」將被插入臨時表中。如果沒有找到,它將檢查table3;如果沒有找到,它將檢查table4

然後main1.product_id值「A001」將被檢查。如果table2發現A001也不會在table3table4進行檢查了,它會被寫入到臨時表和下一個值是從main1表檢查,等等,...

太感謝多

+0

你必須檢查你的說法,根據你的情況'IF NOT EXISTS(SELECT * FROM tableNamw WHERE列名= @參數)' – wiretext

+0

感謝您的評論。但你能給我一個我需要的數據的例子嗎? – Mc888

+0

你應該通過編輯你的問題來創建這個例子,每個表中有什麼行以及你期望的結果。 –

回答

0

看起來你正在尋找的東西是這樣的:

insert into #tmp 
select product_id 
from main1 m 
where 
(
    exists (select 1 from table2 t where t.product_id = m.product_id) 
    or exists (select 1 from table3 t where t.product_id = m.product_id) 
    or exists (select 1 from table4 t where t.product_id = m.product_id) 
    or exists (select 1 from table5 t where t.product_id = m.product_id) 
) 

這將檢查每個表中,如果該行被發現,將其插入到#tmp

+0

虐待將現在嘗試這...非常感謝您的幫助... – Mc888

+0

嗨jamesZ,cars10,如果在table2上找到product_id,此聲明將終止並檢查下一條記錄嗎?還是會繼續檢查table3?謝謝 – Mc888

+0

@ Mc888據我所知它會在第一場比賽中停下來發現 –

0

或者,ALT ernatively,你可以只使用UNION ALL

Insert into #tmp 
Select product_id from main1 where exists 
(select 1 from (
    select product_id p from table2 union all 
    select product_id from table3 union all 
    select product_id from table4 union all 
    select product_id from table5 
) all where p=product_id) 
相關問題