mysql - 单列上的多行 SELECT 查询

标签 mysql database-design

在我的 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/

相关文章:

MySQL 设计表

mysql - 评级表和带有评级的评论表的数据库表设计

python - SQLAlchemy - 与额外列的自引用多对多关系

mysql - 我应该索引外键吗?我应该使用该表的主键吗?

SQL 建模/查询问题

mysql - mysql中的查询和问题有什么区别

mysql - MySQL 8.0.12 中的lower_case_table_names 设置

mysql - 在mysql中搜索查询

java - JDBC-无法检索值并删除 mysql 数据库中的表

mysql - 执行mysql查询时出现重复列名错误?