选择其中Value = Parameter或Value为NULL且参数不在Value中的行

时间:2017-08-31 18:21:10

标签: sql sql-server

我试图从表中选择一行,其逻辑是如果字段中的值与参数匹配或者字段为null且没有记录与参数匹配,则返回该行。这是一个非常简单的例子:

样本表:

ID | Value1 | Value2 | Value3
===|========|========|===========
1  | NULL   | Hello  | World
2  | Hello  | NULL   | World
3  | NULL   | Hello  | Everybody

不起作用的示例查询:

SELECT  *
FROM    table
WHERE   (Value1 IS NULL OR Value1 = 'Hello')
AND     (Value3 IS NULL OR Value3 = 'World')

我在上述查询中获得的结果:

ID | Value1 | Value2 | Value3
===|========|========|========
1  | NULL   | Hello  | World
2  | Hello  | NULL   | World

我想要的结果:

ID | Value1 | Value2 | Value3
===|========|========|========
2  | Hello  | NULL   | World

不幸的是,由于表格和选择的复杂性,我不能做到以下几点:

SELECT  *
FROM    table
WHERE   ((Value1 IS NULL
          AND NOT EXIST (SELECT * FROM table WHERE Value1 = 'Hello')
        OR      Value1 = 'Hello'))
AND     (Value3 IS NULL OR Value3 = 'World')

0 个答案:

没有答案