我想从表中删除一些行。
首先,我尝试使用子查询,但是当在子查询中使用相同的表时,我无法从表中删除数据。
我尝试以另一种方式做到这一点。
set @list_id_remove = (select group_concat(mra.media_id) from movie AS m
right join media AS mra ON m.id = mra.media_id
where m.id is null);
delete from media
where media_id IN (@list_id_remove);
但在这种情况下,查询只删除1行。 我认为麻烦 - 是group_concat删除字符串,我需要整数列表。
答案 0 :(得分:3)
您似乎想要从media
中删除movie
中不存在相应记录的地方。您可以将此作为单个查询执行。
delete from media
where not exists (select 1 from movie m where m.id = media.media_id);
我觉得字段movie.id
对应media.media_id
似乎很奇怪,但这就是原始查询的写法。
编辑:
至于您的问题,您可以将delete
写为:
delete from media
where find_in_set(media_id, @list_id_remove) > 0;