@Artur937
junior

Как совместить DELETE и LEFT JOIN?

Есть таблица пользователей (user) и таблица студентов (students). Если студент берет акад. отпуск, то информация о нем в students удаляется, а как user он остается. Задача найти и удалить именно таких студентов, у них student_id - NULL.
Подскажите, где ошибка?

DELETE FROM user LEFT JOIN students ON user.id = students.student_id WHERE student_id IS NULL
  • Вопрос задан
  • 1161 просмотр
Решения вопроса 3
LaRN
@LaRN
Senior Developer
Т.е. задача удалить всех юзеров, которые не студенты?
Если да, то можно так попробовать:

DELETE user
  FROM user u
 WHERE NOT EXISTS(SELECT 1
                    FROM students s
                   where s.student_id = u.id)
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
DELETE FROM `user`
  WHERE `id` NOT IN (
    SELECT `student_id`
      FROM `students`
  )
Ответ написан
TheRonCronix
@TheRonCronix
Не совсем понятный вопрос. В students student_id = NULL, если академ у студента, тогда зачем джоинить по student_id ? Получается, нужно взять то, что нет в students и удалить из users:

delete from users
where id in
(
select id from users
minus
select id from students
);

Вариант с "not in" не очень, если у вас реально null в student_id. См. https://stackoverflow.com/questions/129077/not-in-...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
BojackHorseman
@BojackHorseman Куратор тега SQL
...в творческом отпуске...
у мультитабличного delete немного другой синтаксис, надо явно указывать таблицы, из которых следует удалить записи

DELETE `user` FROM `user` LEFT JOIN `students` ON `user`.id = `students`.student_id WHERE student_id IS NULL
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы