sql - SQL:如何在一个 sales_id 中有多个 product_id 而不使用分隔符分隔产品?
问题描述
在给我的要求中,可以将多个产品分配给单个销售。但是,我需要帮助如何在 SQL 中完成此操作以及表格的外观。下面是我的架构的样子:
在销售事实中,我还包括一列,其中包含销售中包含的所有产品的总销售额。
附言。与 Products 相同但将 Official_Receipt_Id 作为单个销售的情况也可以有多个 Official_Receipt_Id。
帮助将不胜感激。
解决方案
正确的方法是使用多个表并在查询中加入它们。
例如:
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
推荐阅读
- javascript - 如何设置和使用工具提示?
- python-3.x - 更新熊猫数据框列表中的列
- vue.js - Vue 2 / Vue CLI 3:创建异步单文件组件
- java - 使用最新版本的 jdbc 连接器连接到 1.8 HyperSQL 数据库
- python - 编程面试要素中的死锁问题 19.5
- typescript - 找不到 Firebase 功能的 Typescript 声明
- c - 在 C 中填充二维 int 数组的最简单方法
- java - 如何将多个对象链接到队列
- arrays - Ruby - 将文件行拆分为数组名称中的索引
- c# - 使用搜索文本框中的值过滤数据网格视图列表:“对象引用未设置为对象的实例。”