2013-06-07 3 views
1

Я пытаюсь выяснить, как удалить некоторые записи в базе данных с помощью INNER JOIN.Удалить Entrys в разных таблицах MysQL Query

У меня есть 2 разных таблиц, USER и BLOGS

Я пытаюсь удалить все записи в блогах, когда запись принадлежит пользователю, который не существует. Таким образом, в таблице USER указаны все пользователи с уникальным идентификатором. Этот же идентификатор также находится в таблице BLOGS.

Запрос с, как это будет работать, но я предполагаю, что это даже не правильный запрос MySQL:

delete from BLOGS where `id` does not exist in USER; 

Я знаю, команда «не существует» на самом деле не работает.

Любая идея? Заранее спасибо.

ответ

2

попробовать это

DELETE FROM BLOGS WHERE `id` NOT IN 
    (SELECT id FROM `USER`); 
+0

Извините, плохое решение, и неправильно. Если это вообще было бы ... НЕ IN (SELECT id FROM user); ' – fancyPants

+0

SELECT GROUP_CONCAT (id SEPARATOR ',') AS idList FROM' USER' этот запрос дает строку id как (1,2,3 ....) –

+0

@tombom спасибо, я исправлю его, и у вас есть идея, почему я не могу использовать этот запрос? –

2

Самый быстрый способ сделать левый присоединиться и видеть, какая запись не имеет соответствующей строки в другой таблице.

DELETE FROM 
blogs 
LEFT JOIN users ON blogs.id = users.id 
WHERE users.id IS NULL; 

Другой синтаксис близка к вашему можно, но это не производительное, так как для каждой строки в блогах таблицы, таблицы целых пользователей считывают (при условии, что нет индекса).

Смежные вопросы