2014-09-26 133 views
0

我需要刪除從子查詢中獲得的少量記錄。刪除在同一張表上從選擇查詢中選擇的記錄

假設EMP表的列有EMPNAME,EMPSALARY,主鍵是EMPNAME,EMPSALARY的組合。

delete from emp 
where exists (
     select * 
     from EMP ***** //query which fetch few records from EMP table); 

上述查詢不起作用。

感謝您的幫助。

+1

很難肯定地說沒有整個查詢做,但我懷疑你的子查詢不相關。爲什麼要做這樣的刪除而不是直接刪除?另外,你使用的是SQL Server或Oracle?它們不是同一件事。 – 2014-09-26 19:33:57

+0

爲什麼你不只是做一個刪除與子查詢相同的地方?你真的需要「存在」嗎? – 2014-09-26 19:39:43

+0

另外什麼樣的PK是僱員姓名和工資? – 2014-09-26 19:43:47

回答

1

您的查詢會看起來像

delete from emp 
from emp e 
where exists (select * 
       from EMP 
       WHERE e.EMPNAME = EMPNAME 
       AND e.EMPSALARY = EMPSALARY 
       AND <another Condition>) --<-- Condition on which you want to delete rows 
+0

DELETE FROM EMP E1 WHERE EXISTS(SELECT E2 FROM EMP E2 WHERE E1.EMPNAME = US2.EMPNAME and E1.EMPSALARY ='100'AND E2.EMPSALARY ='1000');這個查詢在ORACLE數據庫中工作正常,但沒有使用MSSQL。你能幫我寫一個適用於ORACLE和MSSQL的通用查詢嗎? – Madhuprathap 2014-09-27 10:48:16

0

你可以使用下面的查詢:

delete from emp 
where primary_key_column_name IN 
    (
    select primary_key_column_name from EMP where <your conditions> 
); 

delete from emp where <your conditions>; 
+0

這與'從你的條件下刪除你的條件'相同 – 2014-09-26 19:41:52

2

你可以直接給在狀態where子句

delete from emp where <conditions>; 

否則你可以用這種方式

DELETE FROM Table1 T1 
WHERE EXISTS (SELECT column1 FROM table2 T2 
       WHERE T1.column1 = T2.column1 
       AND T1.Column2 = T2.column2);