[英]MySQL query to select rows matching criteria and rows related to the matching rows
[英]select records with matching criteria in different rows
假设我有一个SQL表table1
+--------------------------+
| id | person | eats |
+----+--------+------------+
| 1 | 1 | apple |
| 2 | 3 | banana |
| 3 | 2 | orange |
| 4 | 1 | strawberry |
| 5 | 2 | grapes |
| 6 | 4 | apple |
+----+--------+------------+
我想让所有人同时吃apple
和说strawberry
。
我试过了
select person
from table1
where eats in( 'apple', 'strawberry' )
但是此查询返回1, 1, 4
我猜这是因为它正在分别检查apple
和strawberry
。
如何让所有人同时吃apple
和strawberry
?
SELECT person
FROM table1
WHERE eats IN( 'apple', 'strawberry' )
GROUP BY person
HAVING COUNT(DISTINCT eats)=2
更新对我来说,查询本身进行了解释。 但是,由于您要求解释,因此请尝试:
您的原始查询返回以下结果:
1
1
4
但您不想两次获得1,这意味着您应该按person
结果进行分组,这将我们带入下一个查询:
SELECT person
FROM table1
WHERE eats IN( 'apple', 'strawberry' )
GROUP BY person
它将返回:
1
4
但您不希望person=4
因为它只匹配apple
,所以对我来说最简单的方法是计算不同的eats
例如:
SELECT person, count(distinct eats)
FROM table1
WHERE eats IN( 'apple', 'strawberry' )
GROUP BY person
那么我们得到这个结果:
person count(distinct eats)
1 2
4 1
我们已经准备好过滤此结果集,以仅获取那些拥有2个(苹果和草莓)的用户:
SELECT person, count(distinct eats)
FROM table1
WHERE eats IN( 'apple', 'strawberry' )
GROUP BY person
HAVING count(distinct eats) = 2
这将返回:
person count(distinct eats)
1 2
但是您没有要求count
,这就是为什么我从SELECT
ed字段列表中删除了count(distinct eats)
部分。
按person
分组,并且只接受同时拥有两个记录的人
select person
from table1
where eats in( 'apple', 'strawberry' )
group by person
having count(*) = 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.