Mysql 创建SQL语句以返回购买多个项目的用户ID

Mysql 创建SQL语句以返回购买多个项目的用户ID,mysql,sql,Mysql,Sql,我确信解决办法很简单,但我却回避了 表的配置如下所示: TABLE NAME = sales Field 1 = id INT Auto Increment Primary Key Field 2 = user_id INT NOT NULL Field 3 = item VARCHAR(100) NOT NULL 假设我正在寻找购买了以下物品的用户: ipod 鞋 自行车 如何构造SQL语句以返回购买了这三个项目中的每一个项目(用户必须购买了所有三个项目)的用户的用户id值 最简单的解决

我确信解决办法很简单,但我却回避了

表的配置如下所示:

TABLE NAME = sales
Field 1 = id INT Auto Increment Primary Key
Field 2 = user_id INT NOT NULL
Field 3 = item VARCHAR(100) NOT NULL
假设我正在寻找购买了以下物品的用户:

  • ipod
  • 自行车

如何构造SQL语句以返回购买了这三个项目中的每一个项目(用户必须购买了所有三个项目)的用户的用户id值

最简单的解决方案如下

select user_id
from sales s1
where exists (select user_id from sales s2 
               where item = 'ipod' and s2.user_id = s1.user_id)
and exists (select user_id from sales s2 
               where item = 'shoes' and s2.user_id = s1.user_id)
and exists (select user_id from sales s2 
               where item = 'bycycle' and s2.user_id = s1.user_id)

为每个项目合并表的视图

需求不同,因为用户可以购买一件商品中的许多商品

select distinct(ipod.user_id )
from sales ipod
    inner join sales shoes on shoes.user_id = ipod.user_id 
    inner join sales bike on bike.user_id = ipod.user_id 
where ipod.item  = 'ipod' 
    and shoes.item = 'shoes'
    and bike.item = 'bicycle'

此方法也应便于扩展到其他项目:

  select USER_ID, count(distinct ITEM)
    from SALES
   where ITEM in ('ipod', 'shoes', 'bicycle')
group by USER_ID
  having count(distinct ITEM) = 3

我喜欢您构建SQL.Works的方式。在我的例子中,我可能会选择DISTINCT(user_id),这样我只返回一次id。这非常有效,除了我会将COUNT(*)更改为COUNT(DISTINCT ITEM),以防用户多次购买相同的物品,这在本例中是可能的。