2015-04-20 67 views
0

有表像這樣SQLite的:刪除表中的另一個表中規定的所有記錄

mytab  deltab 
--------- -------- 
id | name id | name 
1 | Ann  2 | Bob 
2 | Bob  3 | Cindy 
3 | Cindy 
4 | Dave 

我想執行的查詢其刪除MYTABdeltab指定的所有記錄,所以只有安和戴夫將留在我的選項卡中。

雖然有MySQL multiple-table delete syntax,看起來好像SQLite delete syntax沒有這樣的東西。

我正在考慮使用select-stmt替換語法,並在DELETE查詢之後標記將被刪除的行(如將這些名稱設置爲NULL)。我想知道是否有更有效的方法?

回答

1

試試這個:

DELETE FROM mytab  
WHERE EXISTS (SELECT * 
       FROM deltab 
       WHERE deltab.ID = mytab.ID) 
+0

嗯...一個子查詢,我很少使用它們,如何對他們在SQLite的速度是多少?與Lokesh的建議有什麼不同嗎? –

+0

@JanTuroň: - 我不認爲你會面臨任何性能差異。我寧願在IN中使用EXISTS。由於'in'最適合在有靜態列表的地方通過。 EXISTS會告訴你一個查詢是否返回任何結果 –

+0

@JanTuroň: - 同樣就速度而言,我發現EXISTS比IN快得多(當子查詢結果非常大時) –

3

嘗試此查詢

Delete from mytab where id in (select id from deltab); 
相關問題