繁体   English   中英

MySQL在ON的IN列中加入(b列)

[英]MySQL Joining ON column a IN (column b)

嗨,我想知道是否可以做下面的事情。 显然,我尝试在phpMyAdmin中运行它,但是出现错误。 也许还有另一种编写此查询的方法。

SELECT * FROM eat_eat_restaurants AS r 
INNER JOIN eat_eat_cuisines AS c ON c.cuisine_id IN (r.cuisine_ids)

除此之外,还可以在一行中选择餐厅名称和美食? 例如

r_name    c_names
Marco's   Italian, Modern European

我的2张桌子看起来像这样:

TABLE EAT_EAT_RESTAURANTS
id  r_name    cuisine_ids
1   Marco's   1,2
2   Beldaro   3,4
3   Benny's   1,3


TABLE EAT_EAT_CUISINES
id  c_name
1   Italian
2   Modern European
3   Greek
4   Belgian
5   ...

您当前的架构尚未规范化且效率很低。 尝试3个表: restaurantscuisinesrestaurant_cuisines并执行以下查询:

SELECT r.r_name, GROUP_CONCAT(c.c_name)
FROM restaurants r JOIN restaurant_cuisines rc ON (r.id=rc.r_id)
 JOIN cuisines c ON (rc.c_id=c.id)
GROUP BY r.r_name;

不,语法不能那样工作。

您需要做的是在“餐厅”和“餐厅”之间创建一个交叉表,因为“餐厅”可以属于多个餐厅,而“餐厅”可以提供多个“餐厅”。 之后,您可以将三个表结合在一起以获取餐厅的名称以及它们提供的所有美食的名称。

交叉表将具有以下字段:

id   restaurant_id   cuisine_id
1    1               1
2    1               2
3    2               1
4    2               3
5    4               1

需要第三张桌子:

TABLE EAT_EAT_CUISINES_LOOKUP
r_id    cuisine_ids 1   
1       1
1       2 
// for Marco

下一个JOIN,如果需要1行结果,请使用GROUP_CONCAT()

作为其他解决方案,我建议使用连接表,这会使查询变得简单。 我们命名为:restaurant_cuisine示例:

Id restaurant_id cuisine_id
1        1          1
1        1          2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM