2014-02-07 1 views
0

Я хочу удалить некоторые строки из таблицы.Как удалить строки по id, полученные 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 удаляет строку, и мне нужен список целых чисел.

ответ

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, но как пишется исходный запрос.

EDIT:

Что касается вашего вопроса, то вы можете написать delete как:

delete from media 
    where find_in_set(media_id, @list_id_remove) > 0; 
+0

Спасибо, первый запрос работает, но добавить в запрос "где" перед m.id = media.media_id – yAnTar

+0

Серверы в целом будут СЛЫШАТЬ ВАШИ ВОПРОСЫ ЛУЧШЕ, ЕСЛИ ВЫ [КАПИТАЛИЗИРОВАТЬ] (http://stackoverflow.com/questions/9426138/why-are-the-queries-in-sql-mostly-written-in-capital-letters) ВАШ КОД ;) –

+0

@yAnTar. , , Спасибо. –