繁体   English   中英

选择在不同行中具有匹配条件的记录

[英]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我猜这是因为它正在分别检查applestrawberry

如何让所有人同时吃applestrawberry

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)部分。

http://sqlfiddle.com/#!9/ea612/6

person分组,并且只接受同时拥有两个记录的人

select person 
from table1
where eats in( 'apple', 'strawberry' )
group by person
having count(*) = 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM