SQL查询需求:筛选active='Y'且至少一个属性字段非NULL的记录
问题分析与解决方案
你的问题核心出在SQL运算符的优先级上——AND的优先级比OR高,所以你原来的查询语句逻辑被自动拆解成了这样:
(active = 'Y' AND attribute1 is not null) OR attribute2 is not null OR attribute3 is not null
这就会把那些active='N'但任意一个属性非空的记录也捞出来(比如id486、509、712),完全偏离了你想要的筛选逻辑。
要实现“仅保留active为Y,且至少有一个attribute非空”的需求,你需要把所有属性非空的判断用括号包裹起来,让它们作为一个整体和active='Y'做AND关联:
正确的查询语句
SELECT id FROM value WHERE active = 'Y' AND (attribute1 IS NOT NULL OR attribute2 IS NOT NULL OR attribute3 IS NOT NULL);
更简洁的写法(可选)
如果你觉得多个OR判断太繁琐,也可以用COALESCE函数简化逻辑——这个函数会返回第一个非空的参数,只要任意一个attribute非空,它的结果就非空:
SELECT id FROM value WHERE active = 'Y' AND COALESCE(attribute1, attribute2, attribute3) IS NOT NULL;
这两种写法都能精准筛选出你要的id232和824的记录,同时不需要直接指定id值。
内容的提问来源于stack exchange,提问作者Keepo
相关产品推荐
相关产品推荐

