查询以获取mysql中同一列中的多个字段

时间:2012-09-30 15:43:28

标签: mysql

我正在使用mysql db。

     id | comment       
--------+--------------- 
   1121 |    Accounting
   1121 |    Shipping  
   1121 |    Receiving
   1121 |    Testing
   1122 |    Accounting
   1122 |    Receiving

我想编写这样的查询,以便o / p将是这样的 - :

     id | comment       
--------+--------------- 
   1121 |    Accounting
   1121 |    Shipping  
   1121 |    Receiving
   1121 |    Testing

所以我想要会计,发货,接收和测试评论。

任何人都可以指导我吗?

2 个答案:

答案 0 :(得分:1)

  • 如果您只想要包含所有四条评论的id条记录,则可以按id进行分组,并对包含必要记录数的组进行过滤:

    SELECT   id
    FROM     my_table
    WHERE    comment IN ('Accounting', 'Shipping', 'Receiving', 'Testing')
    GROUP BY id
    HAVING   COUNT(*) = 4
    

    sqlfiddle上查看。

  • 如果您想要这些(id, comment)对的完整记录,可以将结果与原始表一起加入:

    SELECT * FROM my_table NATURAL JOIN (
      SELECT   id
      FROM     my_table
      WHERE    comment IN ('Accounting', 'Shipping', 'Receiving', 'Testing')
      GROUP BY id
      HAVING   COUNT(*) = 4
    ) t
    WHERE comment IN ('Accounting', 'Shipping', 'Receiving', 'Testing')
    

    sqlfiddle上查看。

请注意,如果您的数据模型不保证(id, comment)对的唯一性,则需要在上述查询中将COUNT(*)替换为(性能较低)COUNT(DISTINCT comment)

答案 1 :(得分:0)

是否要选择包含所有4条评论的所有ID?在你的例子中,1121有4个不同的注释(就像一个“状态”,对吧?),1122只有2个状态(注释)。

select T1.id from mytable T1, mytable T2, mytable T3, mytable T3 where T2.id=T1.id and T3.id=T1.id and T4.id=T1.id and T1.comment='Accounting' and T2.comment='Shipping' and T3.comment='Receiving' and T4.id='Shipping'