首页 > 解决方案 > SQL:如何在一个 sales_id 中有多个 product_id 而不使用分隔符分隔产品?

问题描述

在给我的要求中,可以将多个产品分配给单个销售。但是,我需要帮助如何在 SQL 中完成此操作以及表格的外观。下面是我的架构的样子:

示例架构

在销售事实中,我还包括一列,其中包含销售中包含的所有产品的总销售额。

附言。与 Products 相同但将 Official_Receipt_Id 作为单个销售的情况也可以有多个 Official_Receipt_Id。

帮助将不胜感激。

标签: sqldatabaserelational

解决方案


正确的方法是使用多个表并在查询中加入它们。

例如:

CREATE TABLE product (
`product_id` VARCHAR(20) NOT NULL PRIMARY KEY,
`product_name` VARCHAR(50)
);
CREATE TABLE sales (
`sales_id` VARCHAR(20) NOT NULL PRIMARY KEY,
`customer_id` VARCHAR(20),
`total_price` INT
);
CREATE TABLE sales_product (
`sales_id` INT NOT NULL,
`product_id` VARCHAR(20) NOT NULL,
PRIMARY KEY(`sales_id`, `product_id`)
);

sales_product 表包含与销售相关联的每个产品的一行,并将产品和销售表有效地链接在一起。它看起来像这样。

"Sale1" | "Product1"
"Sale1" | "Product2"
"Sale1" | "Product3"
"Sale2" | "Product1"
"Sale2" | "Product2"

当您想要检索销售和所有产品时,您可以执行以下操作:

SELECT s.*, p.*
FROM sales s
INNER JOIN sales_product sp
ON sp.person_id = s.sales_id
INNER JOIN product p
ON p.product_id = sp.product_id

推荐阅读