Как удалить из таблицы с помощью join

#sql #oracle #subquery #inner-join #sql-delete

#sql #Oracle #подзапрос #внутреннее объединение #sql-удалить

Вопрос:

Я пытаюсь удалить из таблицы РИСОВАНИЯ при объединении с МУЗЕЙНОЙ таблицей. Выполняемый мной запрос выдает сообщение об ошибке «ORA-00933: команда SQL не завершена должным образом». Для справки я вставил свой запрос ниже.

 DELETE FROM PAINTING
    INNER JOIN MUSEUM ON PAINTING.Museum_Name = MUSEUM.MuseumName
    WHERE MUSEUM.MuCountry = 'France' OR MUSEUM.MuCountry = 'Spain';
 

Ответ №1:

В Oracle вы бы использовали коррелированный подзапрос.

 delete from painting p
where exists (
    select 1 from museum m where pm.museum_name = m.museum_name and m.mu_country = 'France'
)
 

Комментарии:

1. Хорошо, это работает для удаления всех картин из Франции. Если я также хотел удалить painting из Испании, могу ли я добавить «ИЛИ m.MuCountry = ‘Spain'» в конец?

2. @hasse: and (and m.mu_country = 'France' or and m.mu_country = 'Spain') — здесь важны круглые скобки. Но in лучше: and m.mu_country in ('France', 'Spain') . Или: