Я пишу две операции DELETE в SQL.Первый удаляет запись в базе данных, в которой установлено имя роли студента.Второй удаляет запись с именем null
.Мне интересно, могу ли я иметь одну команду SQL, которая может обрабатывать обе логики, или мне нужно хранить их отдельно?
У меня есть 4 таблицы Student
, Class
, Student_Role
и Signup
.При удалении ниже будет удалена запись, в которой пользователь предоставляет уникальный идентификатор студента, уникальный идентификатор класса и имя роли студента.
Регистрация содержит 3 столбца (CLASS_ID, STUDENT_ID, STUDENT_ROLE_ID)это все внешние ключи
1st DELETE command:
DELETE S FROM SIGNUP S
INNER JOIN CLASS ON CLASS.ID = S.CLASS_ID
INNER JOIN STUDENT ON STUDENT.ID = S.STUDENT_ID
INNER JOIN STUDENT_ROLE ON STUDENT_ROLE.ID = SDR.STUDENT_ROLE_ID
WHERE CLASS.UNIQUE_ID = :classUniqueId AND
STUDENT.UNIQUE_ID = :studentUniqueId AND STUDENT_ROLE.NAME = :roleName
Но если я передам null
для roleName
, то этот запрос не будет работать.По сути, мой второй вариант использования - я хочу удалить запись, в которой уникальный идентификатор студента и уникальный идентификатор класса совпадает с тем, что предоставляет пользователь, но имя роли не существует.В данном случае это null
.Итак, у меня есть еще один оператор DELETE
для этого случая:
2nd DELETE command:
DELETE S FROM SIGNUP S
INNER JOIN CLASS ON CLASS.ID = S.CLASS_ID
INNER JOIN STUDENT ON STUDENT.ID = S.STUDENT_ID
WHERE CLASS.UNIQUE_ID = :classUniqueId AND STUDENT.UNIQUE_ID = :studentUniqueId
AND S.STUDENT_ROLE_ID IS NULL
Теперь мне интересно, смогу ли я объединить эти два в одно утверждение, которое может обработать любое условие (пользователь предоставляет конкретный идентификатор роли студента илиID роли - null
). В конце следует удалить только одну запись.Есть ли способ сделать это?