2016-10-24 21 views
0

ユースケースはまっすぐです。数百万行のコメント表をレビューした後。私たちは、多くの孤児の子供のコメントがあることを認識しています。自己結合の孤児の削除

次のクエリは、

DELETE c.* FROM `comment` c 
where c.parentId not in (select id from `comment`) 

が動作していないことが何か言う:

静的解析を:

3エラーが解析中に発見されました。

予期しないトークン。 (位置7の "c"の近く) 予期しないトークン。 (8桁の "。"の近く) 予期しないトークン。 (9位の「*」に近い)

MySQLは言った:ドキュメント

1093 - あなたは、FROM句

に更新のターゲット表「C」を指定することはできません、私は問題を理解したができません代替案を考える。私はあなたがこの操作にleft joinを使用する必要があるSQL

+0

あなたが何をしても、これらの理論をグローバルな更新とダミーテーブルの削除に関してテストしてください – Drew

答えて

1

で非常に悪い午前:

DELETE c 
    FROM comment c LEFT JOIN 
     comment cp 
     ON c.parentId = cp.id 
    WHERE cp.id IS NULL and c.parentId is not null; 

は注意してください:私はあなたが注意すべきだと思います。すべてのコメントには実際にコメントの親がありますか?

+0

ありがとう、私にお試しください。私は確かに慎重になります –

+0

それはかなり正しくないようです。 SELECTでDELETEを置き換え、あまりにも多くの(間違った)レコードを与えました –

+0

@PhamHuyAnh。 。 。私は問題が 'c.parentId'が' NULL'であってはならないと思っています。 –