java - 三张表,两个外键和一名困惑的程序员

标签 java mysql sql jdbc

所以,我对如何从三个表中提取信息感到困惑。让我相当清楚地设置它(我希望)...

我有三个表 FoodTruckMenuItemsIngredients。每个食品卡车可以有多个菜单项(有一个与 FoodTruck 卡车 ID 相关联的卡车 ID 列),每个菜单项可以有多个成分(与 MenuItem 菜单 ID 相关联的菜单 ID 列)。

所以,我对 mysql 命令获取我真正想要的信息感到非常困惑(连接对我来说仍然相当困惑),因为最终我希望能够向用户展示食品卡车的菜单。它看起来像一个由包含成分的菜单项组成的大菜单。

如果有一个选择查询可以获取所有这些信息,那么输出将由什么组成?我的意思是,它将如何呈现?一个菜单项数组,然后是一个配料数组?如果我得到了这些信息,我就能弄清楚如何处理它,因为我正在使用 JDBC...

忘记添加:在菜单表中有一些列(主键:menuID、foodName、价格、foodType、specialComments)...我需要所有这些。在配料表中,我有名称和菜单ID,但我实际上只需要显示名称。

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

最佳答案

是的,您可以使用 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 也会发生同样的情况。

关于java - 三张表,两个外键和一名困惑的程序员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37515776/

相关文章:

java - 为什么在下面的代码中,当我编译或运行它不止一次时,输出是不同的

mysql - xampp windows 8 上的自动 mysql 备份?

mysql - PostgreSQL 或 MySQL 中的默认选择顺序是什么?

java - 创建sql查询的方法?

Java 独立应用程序日志记录异常 (log4j)

java - 二进制数据存储方案(保存用户上传的文件)

java - 我有一个具有多种方法的类文件,我可以从测试用例中调用该类吗

mysql - freebsd/mysql 5.5 高 i/o 使用率

sql - 返回多个值并以类似数组的方式填充列

c# - 获取整个表 - MySQL 错误