2012-09-30 56 views
0

我正在使用mysql数据库。查询获取mysql中同一列中的多个字段

 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 

所以我想会计,石屏,验收和测试意见。

有人可以指导我吗?

+0

哪个'id'你想要多次出现的评论? – eggyal

+0

对于id 1121我需要评论。基于这些评论我必须更新另一个表 –

+0

那么为什么不简单地使用'WHERE'子句指定过滤标准:例如, 'SELECT * FROM my_table WHERE id = 1121'? – eggyal

回答

0

是否要选择所有标识,包含全部4条评论?在你的例子中,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' 
+0

没有。我想为特定的ID –

+0

“不,我想要那个特定的ID” - 然后它是微不足道的:SELECT * FROM mytable WHERE id = 1121 – Mentallurg

+0

如果我有时使用这个id它只有会计和运输或会计,但我想要所有的四个意见。如果所有四个注释都在那里,我需要更新状态在另一个表中关闭 –

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)在上面查询。

相关问题