如何为IN语句中的单个元素添加WHERE条件?SQL查询求助
修正后的SQL查询及问题分析
原查询的问题
原语句存在两个核心问题:
- 语法错误:同一个SELECT语句里出现了两个
WHERE关键字,违反SQL语法规范,直接导致执行报错。 - 逻辑不符:未区分
product_1和product_2的不同过滤规则,无法实现你要的需求。
满足需求的修正查询
SELECT * FROM sales WHERE -- 保留product_1中所有product_number在products表中的数据 (name = 'product_1' AND product_number IN (SELECT number FROM products)) -- 仅保留product_2中product_number为22、23的数据 OR (name = 'product_2' AND product_number IN (22, 23))
逻辑说明
用括号明确分组条件,确保逻辑优先级正确:
- 对
product_1:延续原查询规则,只保留product_number存在于products表中的记录 - 对
product_2:直接限定product_number为22和23,过滤掉其他无关行
如果product_2的22、23也需要满足product_number存在于products表中的条件,可以简化为:
SELECT * FROM sales WHERE product_number IN (SELECT number FROM products) AND ( name = 'product_1' OR (name = 'product_2' AND product_number IN (22, 23)) )
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

