在我的 MySQL 数据库中,我有两列设置如下(例如):
series_id category_id
1 1
1 2
1 3
2 1
2 3
3 2
4 1
4 2
当 category_id = 1 和 2 时,我可以用来选择 series_id 的正确选择查询是什么?
当前查询是这样的:
SELECT series_id
FROM table
WHERE category_id = '1'
OR category_id = '2'
GROUP BY series_id"
这不会检索任何结果:
SELECT series_id
FROM table
WHERE category_id = '1'
AND category_id = '2'
GROUP BY series_id
关于此示例,我希望它返回 series_id 为 1 和 2 的两行,因此结果如下所示:
series_id
1
4
(可选/奖励)如果有可能提出另一种解决方案或利用:
GROUP_CONCAT(category_id SEPARATOR ', ') AS category
对于本次查询返回的series_id(s) 所以返回的结果是:
series_id category
1 1, 2, 3
4 1, 2
最佳答案
SELECT series_id
FROM my_table
WHERE category_id IN (1,2)
GROUP BY series_id
HAVING COUNT(*) = 2
查看 sqlfiddle .
请注意,如果不能保证 (series_id, category_id)
是唯一的,您应该将 COUNT(*)
替换为性能较差的 COUNT(DISTINCT category_id )
。
要返回分组的结果,您可以再次加入您的表:
SELECT series_id, GROUP_CONCAT(category_id)
FROM my_table NATURAL JOIN (
SELECT series_id
FROM my_table
WHERE category_id IN (1,2)
GROUP BY series_id
HAVING COUNT(*) = 2
) t
GROUP BY series_id
查看 sqlfiddle .
关于mysql - 单列上的多行 SELECT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12318167/