如何编写SQL查询符合多组条件的共同addition_cust_base_id
解决方案
以下是几种可实现需求的SQL写法,将语句中的你的表名替换为实际表名即可运行:
方法1:INTERSECT取交集(直观易读,支持PostgreSQL、MySQL 8.0+、Oracle、SQL Server等主流数据库)
-- 取第一组条件返回的ID和第二组条件返回ID的交集 SELECT addition_cust_base_id FROM 你的表名 WHERE addition_id = 1 AND addition_value = 'test_data' INTERSECT SELECT addition_cust_base_id FROM 你的表名 WHERE addition_id = 16 AND addition_value = 'test0412';
方法2:分组聚合+条件筛选(全数据库兼容,适合后续扩展更多匹配条件)
SELECT addition_cust_base_id FROM 你的表名 WHERE (addition_id = 1 AND addition_value = 'test_data') OR (addition_id = 16 AND addition_value = 'test0412') GROUP BY addition_cust_base_id -- 匹配到2个不同的addition_id即代表同时满足两组条件 HAVING COUNT(DISTINCT addition_id) = 2;
如果你的表不存在同一个addition_id对应同一个addition_cust_base_id的重复记录,可以去掉DISTINCT提升查询效率。
方法3:自连接查询
SELECT DISTINCT t1.addition_cust_base_id FROM 你的表名 t1 INNER JOIN 你的表名 t2 ON t1.addition_cust_base_id = t2.addition_cust_base_id WHERE t1.addition_id = 1 AND t1.addition_value = 'test_data' AND t2.addition_id = 16 AND t2.addition_value = 'test0412';
内容的提问来源于stack exchange,提问作者Surya Singh
相关产品推荐
相关产品推荐

