SQL - 找到购买了2个特定产品的客户

时间:2017-10-02 11:57:27

标签: mysql sql

我需要在SQL中提供以下帮助:

我有3个表,其中包含以下数据:

表名:客户

客户ID - 1,2,3,4,5,6

客户名称 - 客户1,客户2,客户3,客户4,客户5,客户6

表名:交易

交易ID -1,2,3,4,5,6,7,8

产品编号 - 2,2,3,4,2,1,4,2

客户ID - 1,2,4,4,5,6,2,5

表名:产品

产品编号 - 1,2,3,4

产品名称 - 产品1,产品2,产品3,产品4

我想知道哪些客户购买了产品3和4 - 结果应该只是ID为4的客户。

我有以下几行,但它只适用于3或4,因为IN功能意味着显示客户ID 4和客户ID 2.我不知道在这种情况下何处使用AND功能

select distinct c.customer ID
              , c.customer Name 
  FROM transactions t 
  LEFT 
  JOIN  customer c 
    on c.customer ID = t.customer ID 
  LEFT 
 JOIN product p 
    on p.product ID = t.product ID
 where p.product ID IN (3,4)`

由于

维沙尔

5 个答案:

答案 0 :(得分:0)

直接向前:选择同时属于产品3买家和产品4买家的客户:

select * 
from customer
where customer_id in (select customer_id from transactions where product_id = 3)
  and customer_id in (select customer_id from transactions where product_id = 4);

然而,通常只更快一次查询事务表(通过客户聚合)。

select * 
from customer
where customer_id in 
(
  select customer_id 
  from transactions 
  where product_id in (3,4)
  group by customer_id
  having count(distinct product_id) = 2
);

答案 1 :(得分:0)

使用联接:

Select c.CustomerName
from Customer c join Transacation t
on c.Customer_ID = t.Customer_ID
where Product_ID in (3,4)
group by c.CustomerName
having count(distinct Product_ID) = 2

答案 2 :(得分:0)

另一种方法,但并非如此:

select * 
from customer
where customer_id in (select customer_id from transactions where product_id = 3
INTERSECT
select customer_id from transactions where product_id = 4);

答案 3 :(得分:-1)

你需要这个而不是IN

 where p.product ID = '3' AND p.product ID ='4'

IN使用值之间的OR逻辑,这就是你返回两者的原因

答案 4 :(得分:-1)

这样做的一个可能的查询如下。内部子查询仅提取拥有这两种产品的客户(参见最后的WHERE A.RC = 2),模拟您需要的“和条件”类型。

{ ZMQ_POLLIN }