有人可以提供一些帮助吗?!... ...
我有一个名为meals的sql数据库表和另一个名为menu的数据库表:
meals (id, name, description, cost)
menu (date, option1, option2)
这个想法是在某一天有2种膳食选择,例如:
09/02/16 meal id 1 OR meal id 8
10/02/16 meal id 4 OR meal id 12
我想使用类似于此的连接语句:
select * from meals JOIN menu ON meals.id = menu.option1 AND meals.id=menu.option2
但是每次运行时我都会收到一条错误消息,说表别名不是唯一的。
我希望显示最终输出:
date: option 1 meal id, name, cost AND option 2 meal id, name, cost
e.g。
09/02/16 - 1(id) Chicken curry £2.50 + 8 (id) Roast Beef £3.00
10/02/19 4 (id) Baked potato £2.50 + 12 (id) Soup/Sandwiches £2.75
答案 0 :(得分:1)
使用OR
而非AND
,因为您希望匹配任一选项,而不是同时匹配两种选项。这也可以使用IN
完成。
SELECT *
FROM meals
JOIN menu ON meals.id IN (menu.option1, menu.option2)
如果您希望在同一行中同时获得两餐,请使用GROUP_CONCAT
SELECT menu.date, GROUP_CONCAT(' + ', CONCAT_WS(' ', meals.id, meals.name, meals.cost)) AS options
FROM meals
JOIN menu ON meals.id IN (menu.option1, menu.option2)
GROUP BY menu.date
答案 1 :(得分:0)
由于菜单是您正在获取的实体,并根据菜单中的内容获取每餐的详细信息,因此从SELECTING FROM菜单开始是有意义的。
选项1和选项2是两个不同的实体,因此您需要在两个不同的时间加入meals
表,而不是使用AND
或OR
:
SELECT * FROM menu
LEFT JOIN meals AS m1 ON option1 = m1.id
LEFT JOIN meals AS m2 ON option2 = m2.id