【问题标题】:WHERE EXISTS not working in SQL ServerWHERE EXISTS 在 SQL Server 中不起作用
【发布时间】:2014-09-29 14:51:26
【问题描述】:

我需要删除从子查询中获得的几条记录。

假设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。我需要编写一个与两者兼容的查询。

【问题讨论】:

  • "but failed" 在 SQL Server 中不是有效的错误消息(并且:不要将苹果与橙子进行比较。'100' 是字符文字,而不是数字100 是一个数字)

标签: sql-server oracle


【解决方案1】:

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

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(------)

【讨论】:

  • 您好 Mukund,您的查询适用于 SQLSERVER,我需要一些适用于 ORACLE 和 SQLSERVER 的东西。
  • 此查询是否不适用于 oracle?如果没有,您可以尝试加入。
【解决方案2】:

外部和内部查询没有任何关系,这通常很危险,可能导致整个表被清除。

此外,此语法在 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。

【讨论】:

    猜你喜欢
    • 2016-05-19
    • 2019-05-14
    • 1970-01-01
    • 2019-05-18
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多