2016-12-22 161 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';