如何在 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 别名,因此查询更易于编写和阅读。