这里有个需求:
需要给定套餐表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}")