MySQL连接语句

时间:2016-02-09 22:28:28

标签: mysql join

有人可以提供一些帮助吗?!... ...

我有一个名为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

2 个答案:

答案 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表,而不是使用ANDOR

SELECT * FROM menu 
LEFT JOIN meals AS m1 ON option1 = m1.id 
LEFT JOIN meals AS m2 ON option2 = m2.id