如何在 SQL 中与多个表进行内部连接以实现 3NF 规范化
How to inner join with multiple tables for 3NF Normalization in SQL
我正在尝试在此数据库中创建规范化 3 nf(规范形式)。但是,当我执行查询时,table 是空的。如您所见,这是我的 table 和图表。
这里是我们想要3NF的关系
订单->(顾客-送餐员-服务员)-(三元关系)-(Customer_id,Food_id,Carrier_id,Waiter_id)
这是我的查询
SELECT
Customers.ID AS CustomerID,
Food.ID AS FoodID,
Carrier.ID AS CarrierID,
Waiter.ID AS WaiterID,
tOrder.ID AS TORDERID
FROM
tOrder
INNER JOIN
Customers ON Customers.ID = tOrder.Customer_id
INNER JOIN
Food ON Food.ID = tOrder.Food_id
INNER JOIN
Carrier ON Carrier.ID = tOrder.Carrier_id
INNER JOIN
Waiter ON Waiter.ID = tOrder.Waiter_id
ORDER BY tOrder.ID;
显然,您遇到了一些 table 为空或 ID 不匹配的问题。您可以使用 LEFT JOIN
保留所有订单并查看发生了什么:
FROM tOrder o LEFT JOIN
Customers c
ON c.ID = o.Customer_id LEFT JOIN
Food f
ON f.ID = o.Food_id LEFT JOIN
Carrier ca
ON ca.ID = o.Carrier_id LEFT JOIN
Waiter w
ON w.ID = o.Waiter_id
如果没有匹配项,则订单仍在结果中,NULL
表示 table 中没有匹配项的值。
请注意,这还引入了 table 别名,因此查询更易于编写和阅读。
我正在尝试在此数据库中创建规范化 3 nf(规范形式)。但是,当我执行查询时,table 是空的。如您所见,这是我的 table 和图表。
这里是我们想要3NF的关系
订单->(顾客-送餐员-服务员)-(三元关系)-(Customer_id,Food_id,Carrier_id,Waiter_id)
这是我的查询
SELECT
Customers.ID AS CustomerID,
Food.ID AS FoodID,
Carrier.ID AS CarrierID,
Waiter.ID AS WaiterID,
tOrder.ID AS TORDERID
FROM
tOrder
INNER JOIN
Customers ON Customers.ID = tOrder.Customer_id
INNER JOIN
Food ON Food.ID = tOrder.Food_id
INNER JOIN
Carrier ON Carrier.ID = tOrder.Carrier_id
INNER JOIN
Waiter ON Waiter.ID = tOrder.Waiter_id
ORDER BY tOrder.ID;
显然,您遇到了一些 table 为空或 ID 不匹配的问题。您可以使用 LEFT JOIN
保留所有订单并查看发生了什么:
FROM tOrder o LEFT JOIN
Customers c
ON c.ID = o.Customer_id LEFT JOIN
Food f
ON f.ID = o.Food_id LEFT JOIN
Carrier ca
ON ca.ID = o.Carrier_id LEFT JOIN
Waiter w
ON w.ID = o.Waiter_id
如果没有匹配项,则订单仍在结果中,NULL
表示 table 中没有匹配项的值。
请注意,这还引入了 table 别名,因此查询更易于编写和阅读。