使用JOIN的Oracle DELETE sql不起作用

时间:2015-02-20 07:02:55

标签: sql oracle

我的删除语句在Oracle中返回933错误,我不知道出了什么问题 -

DELETE b
from temp a
JOIN
  fact_tab b
on a.col1 = b.col1
and a.col2 = b.col2
and a.col3 = b.col3; 

两个表都没有主键。关于同一件事的select语句有效 -

select * 
from temp a
JOIN
  fact_tab b
on a.col1 = b.col1
and a.col2 = b.col2
and a.col3 = b.col3; 

2 个答案:

答案 0 :(得分:3)

试试这个

DELETE FROM
  fact_tab
WHERE
  EXISTS
  (
    SELECT
      1
    FROM
      temp
    WHERE
      temp.col1 = fact_tab.col1 AND
      temp.col2 = fact_tab.col2 AND
      temp.col2 = fact_tab.col2
  )

答案 1 :(得分:1)

Oracle不允许直接在DELETE语句中使用JOIN。

您可以通过以下方式进行删除:

DELETE
FROM fact_tab
WHERE ROWID IN
  (SELECT b.rowid
  FROM temp a
  JOIN fact_tab b
  ON a.col1  = b.col1
  AND A.col2 = b.col2
  AND A.col3 = b.col3
  );

您也可以使用WHERE EXISTS子句。