MySQL上的三表交集

Posted

技术标签:

【中文标题】MySQL上的三表交集【英文标题】:Three Table Intersection on MySQL 【发布时间】:2020-01-24 20:37:30 【问题描述】:

Item_List 表:

Kaloys 表:

Naays 表:

嗨,我有三个表格,可以在提供的图像上看到,我不知道如何处理这个任务,即显示两个客户(kaloys 和 Nanays)需要的产品组合列表,包括数量。好吧,我通过输入以某种方式显示了两个客户的需求

select Item_List.PID, Item_List.Product, Item_List.supID 
from Item_List where PID in (
   select PID from Kaloys union distinct select PID from Nanays
);

初始输出:

但我不知道如何也显示数量列。我该怎么办?

【问题讨论】:

欢迎来到 SO。见:Why should I provide an MCRE for what seems to me to be a very simple SQL query? 【参考方案1】:

您需要FULL OUTER JOIN 来执行此操作。由于 MariaDB 没有实现这些,您需要通过组合 LEFT JOINRIGHT JOIN 来模拟它们。见下文:

select
  l.*, x.kqty, x.nqty
from (
  select k.pid, k.qty as kqty, n.qty as nqty
  from kaloys k left join nanays n on k.pid = n.pid
  union
  select n.pid, k.qty, n.qty
  from kaloys k right join nanays n on k.pid = n.pid
) x
join item_list l on l.pid = x.pid

【讨论】:

以上是关于MySQL上的三表交集的主要内容,如果未能解决你的问题,请参考以下文章

mysql 判断两个数组是不是有交集

mysql两表汇总后再得到两表的交集和差集,请问怎么实现?

查找 MySQL JSON 对象或数组的交集

mysql获取两个集合的交集和差集

MySQL的7种join,交集,并集,差集。

mysql 基础 交集查询