mysql - 如何加入与外键链接的三个表并获得总和和计数?
问题描述
我创建了 3 个表,表 Customer、Order、Items
表:客户
Emp_ID | 顾客姓名 | 性别 |
---|---|---|
1 | 罗尼 | 男性 |
2 | 杰米 | 女性 |
表:订单
Emp_ID | Order_Id | Orde_Date |
---|---|---|
1 | 11 | 24/08/2021 |
表:项目
Emp_ID | Order_ID | Items_ID | Items_Type |
---|---|---|---|
1 | 11 | 4 | 咖啡 |
1 | 11 | 5 | 牛奶 |
1 | 11 | 6 | 咖啡 |
1 | 11 | 7 | 香蕉 |
如何加入和链接这 3 个表?2021 年 8 月 24 日罗尼订购了多少咖啡、牛奶和香蕉?请查询
解决方案
你的数据模型是错误的。
一个客户可以有多个订单,一个订单应该只与一个客户相关联。所以在这种情况下,表Order
应该有一个外键Customer
。
一个订单可以有多个商品,一个商品可以出现在多个订单中,因此您应该创建一个中间表 ( OrderItems
),其外键为Orders
and Items
,以及与此关系相关的附加属性(例如 a quantity
)
获取此数据模型的所有属性的查询将是这样的:
select *
from Orders o
join Customers c
on o.CustomerId = c.CustomerID
join OrderItems oi
on o.OrderId = oi.OrderId
join Items i
on i.ItemId = oi.ItemId
推荐阅读
- dart - 使用 dart:mirrors 调用顶级函数
- reactjs - 终端的 CRA 高级配置?
- javascript - Javascript - 按属性过滤和/或分组对象数组
- php - 发布功能无法在 php 中与 android 一起使用
- jenkins - 在 jenkins 上的 cypress 中执行下载时未创建下载文件夹
- reactjs - 从基本 ts 文件返回 jsx 的最简化方法?
- vba - 使用高级搜索方法和搜索对象保存方法更改创建搜索文件夹的 Outlook 帐户
- c# - Azure 连接字符串
- python - 在 python 中使用 .replace() 函数时如何解决 UnicodeDecodeError?
- amazon-web-services - 无法通过 terraform 将 cloudwatch 日志组添加到 lex