SQL查询未返回预期结果:排除特定组合条件出错排查
SQL逻辑错误排查及修正
你的问题出在括号内的条件逻辑上:
- 原条件
category != 'Increase Customer Loyalty' AND channel != 'all'的意思是:同时满足分类不是「Increase Customer Loyalty」且渠道不是「all」的记录才会被保留。这会把所有分类是目标值(不管渠道是什么)、以及所有渠道是「all」(不管分类是什么)的记录全部排除,最终导致所有行被过滤。 - 而你实际需要的是排除同时满足渠道为「all」且分类为「Increase Customer Loyalty」的记录,也就是保留「不同时满足这两个条件」的所有记录。
正确的两种写法:
写法1:使用NOT直接排除目标组合
SELECT * FROM `flows_predefined` WHERE platform = 'shopify' AND status = 1 AND NOT ( category = 'Increase Customer Loyalty' AND channel = 'all' ) ORDER BY `flows_predefined`.`id` DESC;
写法2:利用德摩根定律转换(逻辑等价)
SELECT * FROM `flows_predefined` WHERE platform = 'shopify' AND status = 1 AND ( category != 'Increase Customer Loyalty' OR channel != 'all' ) ORDER BY `flows_predefined`.`id` DESC;
这两种写法都能准确排除你指定的目标记录,保留其他符合platform='shopify'和status=1的所有行。
内容的提问来源于stack exchange,提问作者Toma Tomov
相关产品推荐
相关产品推荐

