Categories: MySQLWordPress開発

MySQL の DELETE で JOIN を使う方法

WordPressでカスタム投稿の投稿をまとめて削除しようと思って、postsテーブル のデータ削除は簡単なんだけれど、
postmetaテーブルのデータ削除がああでもない、こーでもないと格闘。

初めは、こうしたけれどダメ。

DELETE FROM tn_postmeta pm 
LEFT JOIN tn_posts p ON p.ID=pm.post_id 
WHERE p.post_type='postType';

どうやら、DELETE と FROM の間にテーブル名を入れないといけないらしい、ということで…

こうしたけれど、これもだめ。

DELETE tn_postmeta FROM tn_postmeta pm 
LEFT JOIN tn_posts p ON p.ID=pm.post_id 
WHERE p.post_type='postType';

どうやら、DELETE と FROM の間のテーブル名には、エイリアス名を入れないといけないということで、

エイリアス名に変えて、これでOKでした。

DELETE pm FROM tn_postmeta pm 
LEFT JOIN tn_posts p ON p.ID=pm.post_id 
WHERE p.post_type='postType';

ちなみに、エイリアス名のAS句は省略できるということなので、

DELETE pm FROM tn_postmeta AS pm 
LEFT JOIN tn_posts AS p ON p.ID=pm.post_id 
WHERE p.post_type='postType';

と同じ意味。のはず。

nakaike