2014-09-26 85 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);