我需要删除从子查询中获取的少数记录。
假设EMP
表格中包含EMPNAME
,EMPSALARY
列,而主键是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。我需要编写一个兼容两者的查询。
答案 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。