2012-10-06 36 views
0

此查詢返回我需要刪除的辦公元組。如何在子查詢中使用delete語句 - 錯誤1093?

SELECT id, reference FROM office o 
WHERE o.id NOT IN 
    (SELECT c.office_id FROM Contract c WHERE office_id IS NOT NULL) 
AND o.reference IN 
    (SELECT o.reference FROM Contract c JOIN office o ON c.office_id = o.id WHERE office_id IS NOT NULL); 

但是,當我寫的查詢

DELETE FROM office 
WHERE id NOT IN 
    (SELECT c.office_id FROM Contract c WHERE office_id IS NOT NULL) 
AND reference IN 
    (SELECT o.reference FROM Contract c JOIN office o ON c.office_id = o.id WHERE office_id IS NOT NULL); 

我有以下錯誤:#1093 - You can't specify target table 'office' for update in FROM clause

但我實在看不出如何解決這個..

任何幫助將不勝感激!

回答

1

嘗試

DELETE FROM office 
WHERE id NOT IN 
(SELECT c.office_id FROM Contract c 
WHERE office_id IS NOT NULL) 
AND reference IN 
(select * from (SELECT o.reference FROM Contract c 
JOIN office o ON c.office_id = o.id 
WHERE office_id IS NOT NULL) x); 

,因爲你不能從你在哪裏選擇表中刪除。但是,使用

select * from (select col from your_table) x 

應該做的伎倆

+0

(回答感謝)隨着您的查詢,我現在有以下錯誤:#1248 - 每一個派生表必須有它自己的別名 – Reveclair

+0

肯定。對不起,忘記了。我剛剛更新了答案。 YOu必須爲名稱命名每個子查詢 –

+0

非常感謝! – Reveclair