查找其中一个购买了超一套产品的所有客户对

时间:2020-03-03 02:04:05

标签: mysql sql

我有三个表来描述一个企业用来管理在线订单的数据库:

     orders
   o_id c_id
    1    1
    2    1
    3    2
    4    3
    5    3


  order_items
  o_id  p_id
   1     1
   2     2
   3     1
   3     2
   3     8
   4     1
   4     2
   5     8
   5     9

  customers
 c_id   name
  1     Mark
  2     Lisa
  3     Sean

我想找到所有配对中的第二个客户已购买了至少一对配对中的第一个客户的所有产品的所有配对客户。我似乎无法弄清楚!我最好的尝试是将orders和order_items作为一个表联接,并将该表与自身交叉联接,以获取购买同一产品的所有对。我似乎无法从那里减少它。

 Expected Output
  c_id1  c_id2
    1      2
    1      3
    2      3

1 个答案:

答案 0 :(得分:1)

您可以为此目的使用自联接。这有助于为每个客户统计产品数量。因此,这定义了具有该信息以及唯一的客户/产品对的CTE:

with ci as (
      select c.c_id, o.p_id, count(*) over (partition by c_id) as cnt
      from order_items oi join
           customers c
           on c.o_id = o.o_id
      group by c.c_id, o.p_id
     )
select ci1.c_id, ci2.c_id
from ci ci1 join
     ci ci2
     on ci1.p_id = oi2.p_id
group by ci1.c_id, ci2.c_id, ci1.cnt
having count(*) = ci1.cnt;