如何使用CTE和INNER JOIN從表中刪除數據?這是有效的語法,所以應該這項工作:如何使用CTE和INNER JOIN刪除行?
with my_cte as (
select distinct var1, var2
from table_a
)
delete
from table_b b inner join my_cte
on var1 = b.datecol and var2 = b.mycol;
如何使用CTE和INNER JOIN從表中刪除數據?這是有效的語法,所以應該這項工作:如何使用CTE和INNER JOIN刪除行?
with my_cte as (
select distinct var1, var2
from table_a
)
delete
from table_b b inner join my_cte
on var1 = b.datecol and var2 = b.mycol;
在Oracle既不CTE也不INNER JOIN
是有效的DELETE
命令。這同樣適用於INSERT
和UPDATE
命令。
一般來說,最好的選擇是使用DELETE ... WHERE ... IN
:
DELETE FROM table_b
WHERE (datecol, mycol) IN (
SELECT DISTINCT var1, var2 FROM table_a)
您也可以從一個子查詢的結果中刪除。在docs中涵蓋(儘管很輕鬆)。
嘗試下面的方法: -
從表-B b其中存在( 與my_cte作爲刪除( 選擇不同VAR1,從表-A VAR2 ) 從my_cte選擇1 其中a.var1 = B。 datecol和a.var2 = b.mycol;
不需要子查詢中的'distinct'(這與'IN'運算符相關) –
謝謝 - 我從來不知道,我一直認爲它會優化通過限制子查詢結果,但我從來沒有真正檢查執行計劃來驗證,我會仔細看看今晚。 DISTINCT在我的查詢中是否有任何傷害? –
如果Oracle只是從子查詢中刪除'distinct',我不會感到驚訝,所以我想從性能的角度來看並不重要。 –