假设我们有 4 个布尔字段 a、b、c、d
当所有 4 个都为真时,我们如何返回任何一个为真的字段,而不是什么都没有?
where a=true or b=true or c=true or d=true
将返回一行,其中甚至所有 4 个字段都设置为真。如何从查询中排除这一行?
如果搜索值是false
假设我们有 4 个布尔字段 a、b、c、d
当所有 4 个都为真时,我们如何返回任何一个为真的字段,而不是什么都没有?
where a=true or b=true or c=true or d=true
将返回一行,其中甚至所有 4 个字段都设置为真。如何从查询中排除这一行?
如果搜索值是false
你可以使用这样的东西:
可以将其简化(由ypercubeᵀᴹ建议)为:
请注意,它不会正确处理 NULL 值。如果您也想要它,则需要使用
coalesce()
.这是将“not when all 4 are true”直接翻译成 SQL:
编辑:
@a_horse_with_no_name 进一步缩短为
编辑2:
这不能正常工作(当所有四列都为假时将返回一行),所以与@a_horse_with_no_name 的答案混合:
另一种使用Postgres 聚合函数的方法我认为可行但实际上行不通!
(不要尝试这个):
这会起作用,但比其他答案冗长得多:
(稍微简化):
然而,这有效。它基于
FALSE < TRUE
顺序:或者:
要不就: