我需要在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)`
由于
维沙尔
答案 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 }