如何在Oracle SQL上使用内部联接删除记录?

Chi*_*ski 2 sql oracle inner-join

我有3张桌子

表A:

| id_A | Data ... |
Run Code Online (Sandbox Code Playgroud)

表B:

| id_B | Data ... |
Run Code Online (Sandbox Code Playgroud)

加入A_B

| id_A | id_B |
Run Code Online (Sandbox Code Playgroud)

那些表格是我的情况的一个例子.好吧,我试图从Join A_B删除许多记录,这取决于许多条件,例如A的名字是X,B的名字是Y.

当我执行SELECT时它可以工作,但是使用DELETE它没有.

这是我的要求:

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';
Run Code Online (Sandbox Code Playgroud)

它说 :

Erreur SQL : ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"
Run Code Online (Sandbox Code Playgroud)

小智 8

执行删除时,只允许一个From表.尝试

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');
Run Code Online (Sandbox Code Playgroud)

这里参考