【问题标题】:mixing multiple tables into one将多个表混合为一个
【发布时间】:2014-01-15 13:35:13
【问题描述】:

我认为我想要的与 union 和/或 join 有关,但我想不通到目前为止如何做到这一点,所以这是我寻求帮助。

我有一些数据不同但结构完全相同的表,我想将它们混合在一起。假设我有两张这样的桌子。

商店_1

产品数量 -------- ---------- AAA 25 BBB 15

商店_2

产品数量 -------- ---------- AAA 10 CCC 40

作为这两个表的混合,我想要的是:

产品商店_1_数量商店_2_数量 -------- ---------------- ---------------- AAA 25 10 BBB 15 空 / 0 CCC 空 / 0 40

这不仅限于两张桌子。实际上,在某些情况下,我需要将 10 个表合二为一,所以有什么想法吗?

【问题讨论】:

  • 尝试使用交叉连接

标签: mysql join union


【解决方案1】:

您需要使用full outer join。问题是 MySQL 本身不支持它们,但它们可以是 emulated quite easily 使用左连接和右连接。

对于您的情况,以下查询应该有效:

SELECT A.PRODUCT, A.QUANTITY, B.QUANTITY FROM STORE_1 A
LEFT JOIN STORE_2 B ON (A.PRODUCT = B.PRODUCT)
UNION ALL
SELECT B.PRODUCT, A.QUANTITY, B.QUANTITY FROM STORE_1 A
RIGHT JOIN STORE_2 B ON (A.PRODUCT = B.PRODUCT)
WHERE A.PRODUCT IS NULL;

【讨论】:

  • 感谢您的快速响应,它就像一个魅力,但是添加一个或多个商店怎么样?如果我有“Store_3”甚至“Store_4”,该如何处理?
【解决方案2】:

您需要 UNIONLEFT JOIN。试试这个:

SELECT p.*, store_1.quantity AS Store_1_Quantity, store_2.quantity AS Store_2_Quantity
FROM (SELECT Product FROM Store_1 UNION SELECT Product FROM Store_2) AS p
LEFT JOIN Store_1
ON p.product = Store_1.product
LEFT JOIN Store_2
ON p.product = Store_2.product

工作演示:http://sqlfiddle.com/#!2/8f4bc1/3

【讨论】:

  • 感谢快速响应的伙伴。因此,如果需要向查询中添加一个或多个商店,这样的事情就可以完成。 SELECT p.*, store_1.quantity AS Store_1_Quantity, store_2.quantity AS Store_2_Quantity, store_3.quantity AS Store_3_Quantity FROM (SELECT Product FROM Store_1 UNION SELECT Product FROM Store_2 UNION SELECT Product FROM Store_3) AS p LEFT JOIN Store_1 ON p.product = Store_1.product LEFT JOIN Store_2 ON p.product = Store_2.product LEFT JOIN Store_3 ON p.product = Store_3.product我想这是为更多商店扩展代码的正确方法,对吧?
  • @BatuZet 是的,你是对的,这是添加更多商店的方法。
猜你喜欢
  • 1970-01-01
  • 2014-10-16
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多