Как удалить строку из таблицы отношений, используя два столбца

#sql #oracle #join #sql-delete

#sql #Oracle #Присоединиться #sql-удалить

Вопрос:

Я пытаюсь удалить связь между таблицами T2 и T3, которая находится в таблице T1. Я искал, но смог найти только примеры УДАЛЕНИЯ только с одним ВНУТРЕННИМ СОЕДИНЕНИЕМ.

Я пытаюсь сделать что-то подобное, но получаю сообщение об ошибке:

Ошибка SQL: ORA-00933. 00000 — «Команда SQL не завершена должным образом»

 DELETE t1
FROM T1 t1
INNER JOIN T2 t2
  ON t2.ID = t1.ID_t2
INNER JOIN T3 t3  
  ON t3.ID = t1.ID_t3
  WHERE (t3.property1 IN 'XXX' AND 
        t3.property2 = 1 AND 
        t2.property = 'YYY');
 

Как я могу заставить это работать?

Ответ №1:

Вы используете синтаксис MySQL для удаления из базы данных Oracle.
Вы можете сделать это с помощью EXISTS :

 DELETE FROM T1 
WHERE EXISTS (SELECT 1 FROM T2 WHERE T2.property = 'YYY' AND T2.ID = T1.ID_t2)
  AND EXISTS (SELECT 1 FROM T3 WHERE T3.property1 = 'XXX' AND T3.property2 = 1 AND T3.ID = T1.ID_t3)
 

Ответ №2:

Это недопустимый синтаксис Oracle. Попробуйте с exists :

     DELETE FROM T1 
    where exists 
               (select * from T2 where T2.ID = T1.ID_t2 and T2.property = 'YYY')
    and exists (select * from T3 where T3.ID = T1.ID_t3 and T3.property1 IN ('XXX') AND T3.property2 = 1  ) ;
 

Для одного значения вы можете использовать T3.property1 ='XXX' вместо T3.property1 IN ('XXX')