如果标题令人困惑,很抱歉,因为英语不是我的第一语言。但是我会尽量详尽地描述我的表格。
我有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;