【问题标题】:How to combine values inside a common column from two different tables?如何组合来自两个不同表的公共列内的值?
【发布时间】:2021-12-15 07:40:56
【问题描述】:

对不起,如果标题令人困惑,因为英语不是我的第一语言。但我会尽量详细描述我的表格。

我的数据库中有 3 个表,名为:Restaurant1、Restaurant2 和 ItemList

餐厅 1 和餐厅 2 的表都包含两列名称:PID(产品 ID)和数量(数量)

ItemList 表包含三列,分别命名为:PID(产品 ID 以及)、产品和 supID(供应商 ID)

这是可视化:

餐厅 1:

   PID           QTY
=========   ============
p01           1
p04           5 
p06           4
p10           4          
p12           1
p14           6

餐厅 2:

   PID           QTY
=========   ============
p04           5
p09           4 
p13           3

项目清单:

   PID           Product    supID
=========   ============    ======
p01           Beef Steak      mla1        
.             Beef Cutlet     mla2
.             Pork Steak      .
.             Whole Chicken   .
.              .              .
.              .              .
              and so on...    mla15
p15

supID 列与此问题无关,因为我想知道如何将餐厅 1 和餐厅 2 像这样组合:

餐厅 1 和 2(合并):

   PID           QTY
=========   ============
p01           1
p04           5 
p06           4
p10           4          
p12           1
p14           6
p04           5
p09           4 
p13           3

简而言之...我想将两个表的值合并到一个表中。但是我只想使用JOIN子句,比如内连接、外连接等。

这是我尝试过但不起作用的方法,我不知道我还能做什么其他解决方案。

SELECT ItemList.PID, Restaurant1.QTY, Restaurant2.QTY FROM ItemList
    -> OUTER JOIN Restaurant1 ON ItemList.PID=Restaurant1.PID
    -> OUTER JOIN Restaurant2 ON ItemList.PID=Restaurant2.PID;

我尝试了不同的组合,例如使用 LEFT JOIN 和 RIGHT JOIN,但它给了我不同的输出。

希望有人能提供帮助。

编辑:我不想制作另一张桌子。相反,我只想以我展示它的方式展示它。其中显示了 Restaurant1 和 Restaurant2 表中产品和数量的组合列表。

【问题讨论】:

  • 在您的示例中,两个餐厅以及组合表中的 p04=5。当两家餐厅的同种产品数量不同时,您希望合并表中有什么?
  • @rd_nielsen 这对我来说没问题,因为它们是不同餐厅的产品,但当然,如果增加它们的数量会更好
  • 我建议只有一张包含 3 列的餐厅餐桌:restaurant_id、product_id 和数量。
  • 你的例子没用。请让每家餐厅的 p04 数量不同,并显示新的 p04 结果并说明结果的计算方式

标签: mysql sql database


【解决方案1】:

合并两个表,然后对数量求和,按产品分组:

select PID, sum(QTY) as QTY
from (
   select PID, QTY from Restaurant1
   union all
   select PID, QTY from Restaurant2
   ) as r
group by PID;

【讨论】:

  • 在现实世界中,在两个不同的位置拥有相同数量的某些产品是可以的,这在union 的情况下是不允许的:它会删除重复项。
【解决方案2】:

你需要UNION ALL两个表来获取所有行,然后你可以总结数量

但是将所有餐厅都放在一张桌子上会更简单,然后一个新列将显示哪些餐厅的数量。

这也是一个好主意,因为你只能联合一定数量的禁忌

CREATE TABLE restaurant1 (
  `PID` VARCHAR(3),
  `QTY` INTEGER
);

INSERT INTO restaurant1
  (`PID`, `QTY`)
VALUES
  ('p01', '1'),
  ('p04', '5'),
  ('p06', '4'),
  ('p10', '4'),
  ('p12', '1'),
  ('p14', '6');
CREATE TABLE restaurant2 (
  `PID` VARCHAR(3),
  `QTY` INTEGER
);

INSERT INTO restaurant2
  (`PID`, `QTY`)
VALUES
  ('p04', '5'),
  ('p09', '4'),
  ('p13', '3');
SELECT
`PID`, SUM(`QTY`) Qty_both
FROM
(SELECT * FROM restaurant1
UNION ALL
SELECT * FROM restaurant2) t1
GROUP BY `PID`
ORDER BY `PID`
PID |数量_两者 :-- | --------: p01 | 1 p04 | 10 p06 | 4 p09 | 4 p10 | 4 第 12 页 | 1 第 13 页 | 3 第 14 页 | 6

db小提琴here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    相关资源
    最近更新 更多