如何从两个不同的表中组合一个公共列内的值?



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

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

表Restaurant 1和Restaurant 2都包含两列:PID(产品ID)和QTY(数量)

ItemList表包含三列:PID(产品ID)、product和supID(供应商ID)

显示如下:

Restaurant1:

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

Restaurant2:

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

ItemLIst:

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的产品和数量的组合列表。

您需要对两个表进行UNION ALL以获得所有行,然后您可以将数量相加

但是,如果将所有餐馆放在一张表中,并在新列中显示有数量的餐馆,则会更简单。

这也是一个好主意,因为您只能合并一定数量的taböes

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 | Qty_both:——| -------:P01 | 1P04 | 10P06 | 4P09 | 4P10 | 4P12 | 1P13 | 3p14 | 6

db<此处小提琴>

将两表合并,然后将数量相加,按乘积分组:

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

相关内容

  • 没有找到相关文章

最新更新