2016-12-22 86 views
0

我有3個表如何使用Oracle SQL上的內連接刪除記錄?

表A:

| id_A | Data ... | 

表B:

| id_B | Data ... | 

加入A_B

| id_A | id_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

你要從中刪除,不刪除從x – 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

嘗試:

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';