Database 如何查询三个相关表?

Database 如何查询三个相关表?,database,database-design,Database,Database Design,我是数据库新手,我很难弄明白这一点。如蒙协助,将不胜感激 交货表 -ID PK -DriverID FK到Drivers表 驱动程序表 -ID PK -LocationID FK到位置表 位置表 -ID PK -餐厅FK至餐厅餐桌 饭桌 -ID PK 一家餐厅可以有多个位置1到多个。一个位置可以有多个1到多个驱动程序。一个司机可以有多个送货单,一对多。这个设计应该是以第三种标准的形式出现。因此,如果我想转到deliveries表并获取与某个特定餐厅相关的所有配送,我将如何查询或进行连接?我是否需

我是数据库新手,我很难弄明白这一点。如蒙协助,将不胜感激

交货表 -ID PK -DriverID FK到Drivers表

驱动程序表 -ID PK -LocationID FK到位置表

位置表 -ID PK -餐厅FK至餐厅餐桌

饭桌 -ID PK


一家餐厅可以有多个位置1到多个。一个位置可以有多个1到多个驱动程序。一个司机可以有多个送货单,一对多。这个设计应该是以第三种标准的形式出现。因此,如果我想转到deliveries表并获取与某个特定餐厅相关的所有配送,我将如何查询或进行连接?我是否需要为直接引用餐厅表的交货添加第二个外键?我想在我看到这个查询之后,我可以弄清楚到底发生了什么。Thx

您可以使用内部联接或联合,具体取决于您想要实现的目标。例如:

SELECT a."articleId" AS id, a.title, a."articleImage" AS "articleImage/url", c.category AS "category/public_id", a."createdOn", concat("firstName", ' ', "lastName") AS author 
          FROM articles a 
          INNER JOIN users u ON a."userId" = u."userId" 
          INNER JOIN categories c ON a."categoryId" = c."categoryId"
    UNION
SELECT g."gifId" AS id, g.title, g."imageUrl" AS "articleImage/url", g.public_id AS "category/public_id", g."createdOn", concat("firstName", ' ', "lastName") AS author 
          FROM gifs g 
          INNER JOIN users u ON g."userId" = u."userId" 
          ORDER BY "createdOn" DESC

您可以说您希望如何获得更详细的查询结果。

如果我了解您想要做什么,那么可能是这样, 首先,您必须联接所有这些表以获得所需的相应结果, 联接条件将为

挑选 来自餐厅A、位置B、司机C、送货D 其中A.ID=B.RestaurantID B.ID=C.LocationID C.ID=D.DriverID


希望这对您有所帮助,您可以说些什么。

您可以使用左或右外部联接来创建一个组合表,然后您可以轻松地查询它,或者您可以使用一个包含多个子查询的查询来获得所需的结果,而无需使用联接。下面是一个关于如何为您的用例使用子查询的示例

SELECT ID FROM Deliveries De 
WHERE De."DriverID" IN (SELECT ID FROM Drivers Dr 
                        WHERE Dr. "LocationID" IN (SELECT ID FROM Locations L 
                                                   WHERE L. "RestaurantID" IN (SELECT ID FROM Restaurant)))

我希望不用使用join语句就能解决您的问题。

请查看,点击谷歌的“stackexchange家庭作业”和鼠标文本上方的投票箭头。你能做些什么?你被困在哪里?你的教科书或文件中有什么相关的内容?请在代码问题中给出一个-cut&paste&runnable代码;示例输入,具有预期和实际输出,包括逐字错误消息;标签和清晰的说明和解释。我还没有写任何代码,这是我只是想弄清楚如何设置db设计。如果我的问题太不清楚,我会删除它,但我想不出一个更好的方法来问这个问题,我认为我应该问清楚。如果你把位置,ID作为主键,多个餐馆ID有相同的位置ID,那么不会有问题吗?我不能再删除这个问题了,否则我会被惩罚,因为已经有答案了。如果我坚持下去,我会受到你们的惩罚,所以我处于一个没有胜算的位置,被迫接受否决票。非常感谢。