三个表,两个外键和一个混乱的程序员

时间:2016-05-29 23:03:15

标签: java mysql sql jdbc

所以,我自己都对如何从三个表中提取信息感到困惑。让我相当清楚地说明这一点(我希望)......

我有三个表FoodTruckMenuItemsIngredients。每个食品卡车可以有多个menuItems(有一个truckID列绑在FoodTruck truckID上),每个menuItem可以有多个成分(menuID列绑定到MenuItem menuID)。

所以,我对mysql命令完全感到困惑,以获取我真正想要的信息(加入对我来说仍然相当混乱),因为最后我希望能够向用户显示Food Truck的菜单。它看起来像一个由menuItems组成的大菜单,其中包含成分。

如果有一个select查询可以获得所有这些信息,那么输出将包含哪些内容?我的意思是,它将如何呈现?一个menuItems的数组,然后是一个成分的数组?如果我得到了信息,我可以弄清楚如何处理它,因为我正在使用JDBC ......

忘记添加:在菜单表中有列(主键:menuID,foodName,price,foodType,specialComments)......我需要所有这些。在Ingredients表中,我有name和menuID,但我真的只需要显示名称。

我完成了大部分我需要的查询。只是我正在尝试显示完整的菜单。我正在使用DAO设计和准备语句来清理输入。在这样做的过程中,我希望能够使用连接或以某种方式获取所有相关信息,而无需对数据库进行多次查询

1 个答案:

答案 0 :(得分:0)

是的,您可以使用LEFT JOIN在一个查询中执行此操作。

SELECT
  * // I used *, you should modify it if you want to better control the output
FROM FoodTruck ft
LEFT JOIN MenuItems mi
  ON mi.truckID = ft.truckID
LEFT JOIN Indgredient ind
  ON ind.menuID = mi.menuID

左连接将保留左侧表格中的记录,即使在右侧表格中找不到任何行。

请注意,FoodTruck的行可能会重复,因为每辆卡车都有多个菜单项。同样也会发生在MenuItem