我正在使用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
所以我想要会计,发货,接收和测试评论。
任何人都可以指导我吗?
答案 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'