2010-06-08 120 views
0

我需要編寫一個SQL腳本來選擇table1中的一個記錄,然後在數據庫的其餘表中查找。如果它沒有找到記錄,我需要刪除table1中的記錄。任何人提供一些示例腳本?SQL刪除查詢

+0

你能提供你正在嘗試做一個更具體的解釋? – VeeArr 2010-06-08 14:20:10

+1

你爲什麼一次只做一個記錄? – HLGEM 2010-06-08 14:21:05

+0

最終目標是刪除table1中沒有相應記錄的所有記錄嗎? – 2010-06-08 14:21:32

回答

3

一個例子

delete table1 
where not exists (select 1 
        from Table2 
        where table1.SomeColumn = Table2.SomeColumn) 
AND table1.SomeColumn = 5 --just an example, 

離開進出,如果你想刪除所有從表1中不存在表中的行2

你也可以使用LEFT JOIN或NOT IN

2

喜歡我做的事情:

DELETE table1 
    FROM table1 
WHERE table1.ID NOT IN (
     SELECT RefID FROM Table2 
     UNION 
     SELECT RefID FROM Table3 
     ... 
     ) 

假設REFID是FK對table1.ID。這是你需要的嗎?

+0

如果檢查多個表格,這將工作得很好。當然,我會讓它成爲「聯盟」。 – 2010-06-08 14:24:42

1
DELETE FROM Table1 WHERE id=10 AND NOT EXISTS (SELECT * FROM Table2 WHERE id=10); 
1

非常普遍,(因爲你給了小細節)

Delete Table1 t1 
Where [Criteria to find table1 Record] 
    And Not Exists(Select * From Table2 
       Where pk = t1.Pk) 
    And Not Exists(Select * From Table3 
       Where pk = t1.Pk) 
    And Not Exists(Select * From Table4 
       Where pk = t1.Pk) 
    ... etc. for all other tables 
+0

@VeeArr:我們有一個基於日期時間戳清除所有表中的記錄的數據庫,但有一個表沒有日期時間戳。我需要從這裏刪除其他地方不存在的記錄。 @HLGEM:我不需要一次做一條記錄,但我只想要一個基本腳本。我已經做了選擇和刪除記錄存在的地方,但不是相反。我正在查找大約10張桌子。 @Martin Smith:是的。 – jerle78 2010-06-08 14:29:43