如何通过组合多个表中的类似元素来创建新表?

时间:2015-04-20 02:13:57

标签: mysql

我已经完成了SQL的新手,并试图自己在课堂上学习它,所以我有点迷失/不知所措,试图弄清楚如何做到这一点......我刚开始昨天。

基本上,我试图建立一个超级基本仓储通话模型,您可以从存储的项目池中获得来自不同供应商的单独需求表。您还有一张表格,其中包含与这些物品相关的信息。像这样:

CREATE TABLE Properties (
SKU INT PRIMARY KEY,
Xdim FLOAT,
Ydim FLOAT,
Zdim FLOAT,
Weight FLOAT,
QTYavail INT
);

INSERT INTO Properties (
SKU, Xdim, Ydim, Zdim, Weight, QTYavail)
VALUES
(1001, 3, 4, 5, 2.5, 50),
(1002, 2, 4, 6, 1.15, 60); 

CREATE TABLE Order_1 (
SKU INT,
QTY INT);

CREATE TABLE Order_2 (
SKU INT,
QTY INT);

CREATE TABLE Order_3 (
SKU INT,
QTY INT);

INSERT INTO Order_1 (
SKU, QTY)
VALUES
(1001, 10),
(1002, 4);

INSERT INTO Order_2 (
SKU, QTY)
VALUES
(1001, 3),
(1002, 1);

INSERT INTO Order_3 (
SKU, QTY)
VALUES
(1001, 6);

我的目标是将所有这些组合成一个综合表格,其中我结合了每个SKU的总需求...例如,SKU 1001将QTYdemand为19.我的列上的列将是

SKU
Xdim
Ydim
Zdim
重量
QTYdemand
QTYavail

我已经设法通过以下代码了解如何合并订单和相对SKU需求:

SELECT SKU, SUM(QTY) QTYdemand
from
(
SELECT * FROM Order_1
UNION ALL
SELECT * FROM Order_2
UNION ALL
SELECT * FROM Order_3
) x
group by SKU;

但我不知道如何进一步使用此查询,并且不知道这是否是正确的开始路径。

非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

订单应按其唯一ID(主键)个性化,而不是存储在单独的表中。

在大多数情况下,您将维护订单表和产品表。然后,在数据库中,您将在订单和产品之间建立多对多关系,这将由具有复合密钥的第三个表表示(主键包含来自Order的id和来自Product的id)。

因此,您最终得到三个表(斜体的主键):

订单 ID ,日期,与整个订单相关的任何其他数据

产品: id ,名称,与产品相关的任何其他数据

OrderProduct: order_id,product_id ,qty

订单表包含每个订单的记录,产品表包含每个产品的记录,以及OrderProduct表,其中包含订单中每个产品的记录。 OrderProduct每个订单可以有多行,每个产品可以有多行,但是特定订单和特定产品的唯一组合。