2011-09-15 20 views
1

我有一個要求,我希望根據表A的條件選擇行並且必須刪除表B.錯誤::刪除陳述中的查詢失敗

例如EMP和EMP1兩個表

Merge into emp1 a 
using (select * from emp) b 
    on (a. empno =b.empno) 
WHEN MATCHED THEN DELETE 
where(b.LOC='NEW YORK'); 

上面的查詢結果中的錯誤。 如果我使用Where exists,表A中的所有行都被刪除,這不是一個正確的解決方案。

delete from emp1 a 
where exists 
     (select null 
     from emp b 
     where a. empno =b.empno 
      and b.LOC='NEW YORK' 
    ); 

請建議

回答

3
DELETE FROM emp1 a 
WHERE a.empno IN 
     (SELECT b.empno 
     FROM emp b 
     WHERE b.LOC = 'NEW YORK' 
    ); 
0

我不熟悉的MERGE語句,但我會說,EMP B未正確申報,因爲b是括號外。

此外,我會建議先執行一個DELETE命令,讓視圖(或臨時連接的表)能夠看到什麼項匹配。然後您可以使用基於視圖的DELETE並輕鬆從兩個表中刪除。