选择购买一组商品的用户

时间:2017-05-03 20:12:02

标签: sql postgresql

我有这样的购买表:

+--------+--------+     
| UserId | ItemId |     
+--------+--------+     
|      1 |      2 |     
|      4 |      5 |     
|      5 |      3 |    
|      1 |      4 |     
+--------+--------+     

我想选择已购买商品的所有用户ID(4,5,6)。我正在尝试这个查询:

select distinct UserId from purchases where ItemId in (4,5,6) 

这会返回购买了这3件商品中任意商品的用户,但我只想要购买了所有3件商品的用户。

对我能做什么的任何想法?我正在使用PostgreSQL 8。

2 个答案:

答案 0 :(得分:3)

count(*)子句中的having与集合中的项目数相匹配将返回已购买集合中所有项目的所有UserId

select UserId 
from purchases 
where ItemId in (4,5,6) 
group by UserId
having count(distinct ItemId) = 3 /*  3 is the number of items to match the set */

如果给定的UserIdItemId可以有多行,那么您可以使用count(distinct ItemId)代替。

rextester演示:http://rextester.com/QXL12068

答案 1 :(得分:0)

select userId
from purchase
group by userId
having
    bool_or (itemId = 4) and
    bool_or (itemId = 5) and
    bool_or (itemId = 6)