テーブルからデータを削除しようとしていますが、クエリは次のとおりです。
delete from mybadge where uid=5 and badge_name=(select concat(tag_name,'-Beginner') from tag,post_tags where post_tags.tag_id=tag.tag_id);
selectステートメントで5つのレコードを取得していますが、その5つのレコードをすべて削除したいと思います。
「=」記号の代わりに「in」キーワードを使用
delete from mybadge where uid=5 and badge_name in (select concat(tag_name,'-Beginner') from tag,post_tags where post_tags.tag_id=tag.tag_id);
あなたが述べたように、あなたのサブクエリは5行を返します。ただし、 Badge_name は同じ行に 5 つの異なる値を持つことはできません。それは次のように言うのと少し似ています:
delete from mybadge where uid=5 and badge_name=(5 different values)
試す
delete from mybadge where uid=5 and badge_name in (select concat(tag_name,'-Beginner') from tag,post_tags where post_tags.tag_id=tag.tag_id);
select ステートメントが正常に機能している場合は、select によって返されたすべての uid を削除します。
DELETE FROM mybadge WHERE uid IN(
SELECT uid
FROM mybadge
WHERE uid=5
AND badge_name=(SELECT concat(tag_name,'-Beginner')
FROM tag,post_tags
WHERE post_tags.tag_id=tag.tag_id)
);