我试图从表中选择一行,其逻辑是如果字段中的值与参数匹配或者字段为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')