【问题标题】:Sql server complaining about this IF NOT EXISTS statementSql server 抱怨这个 IF NOT EXISTS 语句
【发布时间】:2008-11-14 16:14:39
【问题描述】:

Sql server 抱怨这个 IF NOT EXISTS 语句,说关键字 'OR' 附近有'不正确的语法。

我的查询:

IF NOT EXISTS ( 
                (SELECT * FROM Users where userID = 1)
                OR
                (SELECT * FROM sales WHERE saleID = 1)
              )
BEGIN
            // blah blah blah

END

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    试试这个方法

    IF 
        NOT EXISTS (SELECT 1 FROM Users where userID = 1)  
    AND 
        NOT EXISTS (SELECT 1 FROM sales WHERE saleID = 1)
    BEGIN 
           -- blah blah blah
    END
    

    或者,如果你坚持析取:

    IF NOT (
        EXISTS (SELECT 1 FROM Users where userID = 1)  
        OR 
        EXISTS (SELECT 1 FROM sales WHERE saleID = 1)
    )
    BEGIN 
        -- blah blah blah
    END
    

    EXISTS 运算符采用单个 select 语句并检查任何结果(因此您可以使用常量 1 而不是 * 或列名,这样更有效)

    【讨论】:

    • 啊,好吧,我正在尝试将我的 C# 语法带到“表”哈哈
    【解决方案2】:

    你想要 IF NOT EXISTS (SELECT...) AND NOT EXISTS (SELECT ....)

    【讨论】:

    • 为什么我不能在一个语句中同时做这两个?这毫无意义!
    • @Blankman:不,它应该是 AND NOT EXISTS,因为您正在从 IF NOT (A OR B) 更改为 IF (NOT A) AND (NOT B)。参见德摩根定律:en.wikipedia.org/wiki/De_Morgan%27s_laws
    【解决方案3】:

    将“或”改为“并”

    【讨论】:

    • 只要两个查询返回相同的字段集,就可以了
    【解决方案4】:

    也许这就是你想要做的:

    IF NOT EXISTS(SELECT * FROM Users WHERE userID = 1) OR (AND) NOT EXISTS(SELECT * FROM sales WHERE saleID = 1)
    

    【讨论】:

      猜你喜欢
      • 2021-01-14
      • 2021-10-20
      • 2012-06-05
      • 2010-11-13
      • 2013-05-09
      • 1970-01-01
      • 2019-05-18
      • 2012-01-03
      • 2014-05-27
      相关资源
      最近更新 更多