如何通过id删除行,由group_concat获取

时间:2014-02-07 16:07:57

标签: mysql group-concat

我想从表中删除一些行。

首先,我尝试使用子查询,但是当在子查询中使用相同的表时,我无法从表中删除数据。

我尝试以另一种方式做到这一点。

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删除字符串,我需要整数列表。

1 个答案:

答案 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;