1

joinsof でレコードを削除しようとしてtablesいますが、うまくいきません。

私のクエリは次のとおりです。

DELETE FROM category
WHERE  catid NOT IN(SELECT av.catid
                    FROM   category av
                           JOIN rel
                             ON rel.catid = av.catid
                           JOIN main_list
                             ON rel.webid = main_list.mainid
                    GROUP  BY av.catid)  

このクエリが機能しないのはなぜですか? 次のエラーがスローされます。

#1093 - You can't specify target table 'category' for update in FROM clause

これを修正するにはどうすればよいですか? エラーで何が間違っているのかわかりません。

4

2 に答える 2

6

使ってみてくださいLEFT JOIN

DELETE  av
FROM    category av
        LEFT JOIN rel ON rel.catid = av.catid
        LEFT JOIN main_list ON rel.webid = main_list.mainid 
WHERE   rel.catid IS NULL

このクエリを実行する前に、データベースをバックアップしてください。

于 2013-07-05T11:54:09.530 に答える
1

これを試して::

DELETE c from  category c
LEFT join rel  ON rel.catid = av.catid
LEFT JOIN main_list  ON rel.webid = main_list.mainid
where rel.catid is null 

また

DELETE FROM category
WHERE  catid NOT IN(
Select catid from 
(SELECT av.catid as catid
                    FROM   category av
                           JOIN rel
                             ON rel.catid = av.catid
                           JOIN main_list
                             ON rel.webid = main_list.mainid
                    GROUP  BY av.catid)  as tempCat)
于 2013-07-05T11:54:26.810 に答える