0

このクエリは、削除する必要があるオフィスのタプルを正確に返します。

    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

しかし、私は本当にこれを解決する方法がわかりません..

どんな助けでも大歓迎です!

4

1 に答える 1

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

トリックを行う必要があります

于 2012-10-06T23:54:02.790 に答える