这里有个需求:
需要给定套餐表setmeal 的 id 查询这个套餐内的所有菜品 dish
实际上如果可能,只需要查询套餐菜品表(setmeal_dish),查看一个套餐内包含包含的所有菜品,然后把这些菜品全部取出即可。
看一下setmeal_dish 表:
再看一下dish:
在 setmeal_dish 表中,没有查询到dish,只有dish的id。这个表应该是同一个setmeal_id 对应多个dish_id。
因此,我们如何需要现根据给定的 setmeal_id 查询 setmeal_dish,然后再根据得到的 dish_id 去 dish表查询。
因此逻辑如下:
/*** 根据套餐Id查询菜品dish* 这里的 dish 表中是没有 setmealId 的字段的。* 因此这里采用左连接,得到 dish 表的所有字段,然后将 dish 表和 setmeal_dish 表联查。* 对dish 和 setmeal_dish 采用左连接,先得到所有的 dish 表字段,然后 左连接 根据 dish 的 id 和 setmeal_dish 的 dish_id 联查* 根据 setmeal_dish 的 id 和给定的 setmealId 筛选。* @param id* @return*/@Select("select d.* from dish d left join setmeal_dish sd on d.id = sd.dish_id where sd.setmeal_id" +"= #{setmealId}")