SQL查询:如何筛选列B对应值下A在指定范围的数据
解决你的SQL筛选问题
直接用OR条件筛选
最简便的写法是把三个判断条件用OR连接,这样就能匹配满足任意一个条件的客户:
SELECT customer_name FROM your_table WHERE (B = 1 AND A BETWEEN 0 AND 10) OR (B = 2 AND A BETWEEN 11 AND 20) OR (B = 3 AND A BETWEEN 21 AND 30);
这个语句会直接找出符合三个规则中任意一条的记录,完全符合你要筛选customer1、customer2、customer3的需求。
用UNION合并结果
如果你习惯用子查询的思路,也可以分别查询每个条件的结果再合并:
SELECT customer_name FROM your_table WHERE B = 1 AND A BETWEEN 0 AND 10 UNION SELECT customer_name FROM your_table WHERE B = 2 AND A BETWEEN 11 AND 20 UNION SELECT customer_name FROM your_table WHERE B = 3 AND A BETWEEN 21 AND 30;
UNION会自动去掉重复的客户名,要是能确定每个客户只会符合一个条件,用UNION ALL会更快。
之前关联子查询出错的原因
你之前的写法应该是用了AND关联三个子查询的条件,或者关联逻辑错误,导致数据库误以为需要同时满足三个规则,所以才会得到(实际不存在的)同时符合三个条件的客户。换成上面两种写法就能解决问题。
内容的提问来源于stack exchange,提问作者Eddie
相关产品推荐
相关产品推荐

