2010-05-10 29 views
2

我寫一個小腳本同步2個MySQL表(T1被「鏡像」到t2)從在使用表中刪除where子句

在步驟我想刪除裏面T2行時,已經在t1中用相同的id刪除。

我嘗試此查詢:

delete from t2 where t2.id in 
    (select t2.id left join t1 on (t1.id=t2.id) where t1.id is null) 

然而MySQL禁止我在刪除和選擇(聲音的方式邏輯)

當然使用T2在同一時間,我可以將查詢拆分爲2個查詢:首先選擇ID,然後使用這些ID刪除行。

我的問題:你有更簡潔的方式來刪除t2中不存在的行嗎?只有一個查詢?

回答

0

這個查詢連接了兩個表,並只選擇那些沒有在新表中的合作伙伴,從而使您可以刪除它們一氣呵成:

DELETE t2 FROM t2 
LEFT JOIN t1 
ON t2.id = t1.id 
WHERE t1.id IS NULL; 
0
delete t2.* 
from t2 
left join t1 on (t1.id=t2.id) 
where t1.id is null; 
0

如果使用t1與t2的左連接,對於t2中沒有匹配的任何行,t1字段的值將爲NULL,因此這應該起作用:

DELETE FROM t2 
LEFT JOIN t1 ON t1.id = t2.id 
WHERE t1.id IS NULL;