[英]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个表: restaurants
, cuisines
和restaurant_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.