2016-12-22 4 views
0

У меня есть 3 таблицыКак удалить запись, используя внутреннее соединение в Oracle SQL?

Таблица A:

| id_A | Data ... | 

Таблица B:

| id_B | Data ... | 

Регистрация a_b

| id_A | id_B | 

Эти таблицы являются примером моей ситуации. Ну, я пытаюсь удалить много записей из Join A_B в зависимости от многих условий, таких как имя A, это X, а имя B - Y.

Когда я выполняю SELECT, он работает, но с DELETE это не так.

Это мой resquest:

DELETE A_B FROM A 
INNER JOIN A_B 
    ON (A.ID = A_B.A_ID) 
INNER JOIN B 
    ON (B.ID = A_B.B_ID) 
WHERE B.NAME IN ('X', 'Y') 
AND A.NAME = 'Z'; 

Он говорит:

Erreur SQL : ORA-00933: SQL command not properly ended 
00933. 00000 - "SQL command not properly ended" 
+2

Вы хотите удалить из, а не DELETE FROM х – Jonast92

ответ

3

Только один из таблицы разрешен при выполнении удаления. попробовать

DELETE FROM A_B 
WHERE EXISTS (SELECT 1 FROM A 
    INNER JOIN B ON (B.ID = A_B.B_ID) 
    WHERE A.ID = A_B.A_ID 
    AND B.NAME IN ('X', 'Y') 
    AND A.NAME = 'Z'); 

ссылка here

2

Try:

delete from A 
where A.ID in 
    (
    select A_ID 
    from A_B 
    inner join B 
     on B.ID = A_B.B_ID 
    where B.NAME in (...) 
    ) 
and A.NAME = 'Z' 
2

Вы можете попробовать merge

merge into A 
using (select * from A_B inner join B on (B.ID = A_B.B_ID) where B.NAME IN ('X', 'Y')) d 
on (d.A_ID = A.ID) 
when matched then delete where A.NAME = 'Z'; 
Смежные вопросы