Standard-SQL中如何合并两个WHERE条件并实现OR逻辑查询?
合并两个SQL WHERE条件的正确姿势
嘿,我懂你现在卡在哪了!要实现满足语句1 或 语句2的查询,核心是用括号明确逻辑优先级——毕竟SQL里AND的优先级比OR高,直接写的话逻辑很容易跑偏。
先把你的两个条件再理一遍:
- 语句1:
(feedback IS NOT NULL OR text IS NOT NULL) AND rating <= 2 - 语句2:
(rating = 3 OR rating = 4) AND feedback IS NOT NULL
要让这两个条件满足任意一个,只需要把它们用OR连接,并且给每个完整条件套上括号就行,这样能保证每个子条件的逻辑先被计算,再做OR判断,可读性和准确性都拉满。
最终正确的WHERE子句
WHERE ((feedback IS NOT NULL OR text IS NOT NULL) AND rating <= 2) OR ((rating = 3 OR rating = 4) AND feedback IS NOT NULL)
为什么要加外层括号?
可能你会疑惑:不加外层括号的话,SQL会不会自动按正确顺序计算?理论上,因为AND优先级更高,不加外层括号的结果和加了是一样的,但强烈建议加上外层括号——一来逻辑一目了然,谁接手都能看懂;二来后续修改条件时,不会因为优先级问题搞出bug,稳得很。
逻辑核对
我们再确认下这个条件覆盖的场景:
- 当评分≤2时,只要
feedback或text有一个不为空就符合要求; - 当评分是3或4时,必须
feedback不为空才符合要求。
完全匹配你想要的需求对吧?
内容的提问来源于stack exchange,提问作者user3258383
相关产品推荐
相关产品推荐

