MySQL如何查询同时关联item-1和item-2记录的id值
问题描述
现有如下结构的数据库表:
|id |item | |1 |item-1 | |2 |item-1 | |1 |item-2 | |3 |item-3 | |2 |item-2 | |1 |item-3 |
需要查询同时拥有item-1和item-2对应记录的id值,原有语句SELECT id FROM table WHERE item = 'item-1' AND item = 'item-2'无法返回正确结果,预期输出如下:
|id | |1 | |2 |
解决方案
- 方案1:聚合分组筛选(推荐)
SELECT id FROM 表名 WHERE item IN ('item-1', 'item-2') GROUP BY id HAVING COUNT(DISTINCT item) = 2;
说明:先筛选出所有item为目标值的记录,按id分组后统计不同item的数量,数量等于目标item总数的id即为符合要求的结果。如果表中不存在同id下重复item的记录,可以省略DISTINCT关键字提升查询效率。
- 方案2:自连接查询
SELECT DISTINCT t1.id FROM 表名 t1 JOIN 表名 t2 ON t1.id = t2.id WHERE t1.item = 'item-1' AND t2.item = 'item-2';
说明:通过同表关联的方式,匹配同一个id下同时存在两种item的记录,最后去重得到结果。
内容的提问来源于stack exchange,提问作者Djuka
相关产品推荐
相关产品推荐

