哪些EXISTS在SQL Server中不起作用

时间:2014-09-29 06:15:55

标签: sql-server oracle

我需要删除从子查询中获取的少数记录。

假设EMP表格中包含EMPNAMEEMPSALARY列,而主键是EMPNAME,EMPSALARY的组合。

DELETE FROM EMP E1 
WHERE EXISTS (SELECT E2 
              FROM EMP E2 
              WHERE E1.EMPNAME = E2.EMPNAME 
              AND E1.EMPSALARY = '100' 
              AND E2.EMPSALARY = '1000');

以上查询适用于ORACLE,但提供:

  

E1附近的语法不正确。

使用SQL Server。我需要编写一个兼容两者的查询。

2 个答案:

答案 0 :(得分:0)

您正在使用的别名存在一个问题。试试这个

DELETE E1
FROM EMP E1
WHERE EXISTS (SELECT NULL 
              FROM EMP E2 
              WHERE E2.EmpName =  E1.EmpName
              AND E1.EMPSALARY = '100' 
              AND E2.EMPSALARY = '1000');

在T-Sql中,别名就像这样 -

Delete f from dbo.Foo as f where exists(------)

答案 1 :(得分:0)

外部和内部查询不以任何方式相关,这通常是危险的,并且可能导致整个表被清除。

此外,此语法在SQL Server中不起作用,您需要稍微更改一下:

DELETE e1 --Here is the difference
FROM EMP E1
where E1.EMPNAME = US2.EMPNAME --WTH this alias came from?
AND E1.EMPSALARY = 100
and EXISTS (SELECT E2 FROM EMP E2 WHERE E2.EMPSALARY = 1000);

不确定它是否仍然适用于Oracle。