![](/img/trans.png)
[英]sql join two tables and get the unique values from one table based on another
[英]Join two tables and get from one table a array of values
我有两个表:一个, 主表显示星期几,当天显示汤 。 表汤,列出了可能的汤。
+-----+------------+--------+
| id | day |id_soup |
+-----+------------+--------+
| 1 | Friday | 1 |
| 2 | Saturday | 1 |
| 3 | Sunday | 2 |
+-----+------------+--------+
+-----+------------+
| id | soup |
+-----+------------+
| 1 | potatoes |
| 2 | carrots |
| 3 | peas |
+-----+------------+
要获取星期五汤(字符串不是id),我可以使用如下查询:
SELECT ma.id, ma.day, ma.id_soup, so.soup
FROM main ma, soup so
WHERE ma.id_soup = so.id
AND ma.id = 1
我得到这样的东西(输出)
+-----+------------+---------+----------+
| id | day | id_soup | soup |
+-----+------------+---------+----------+
| 1 | Friday | 1 | potatoes |
+-----+------------+---------+----------+
如果星期五只提供一种汤,这会很好。
问题在于,周五将提供两种汤(土豆和豌豆-一系列汤)
我们需要另一个桌子吗?
已编辑
+-----+---------+---------+
| id | id_day | id_soup |
+-----+---------+---------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 2 |
| 4 | 2 | 3 |
| 5 | 3 | 1 |
| 6 | 3 | 3 |
+-----+---------+---------+
除了主表的其他字段(id,day,id_soup)之外,还可以在单个查询中获得汤数组(马铃薯,豌豆)吗?
构造此查询的最佳方法是什么?
编辑:
所需的输出(仅用于说明):
+-----+------------+---------+------------------+
| id | day | id_soup | soup |
+-----+------------+---------+------------------+
| 1 | Friday | 1 | potatoes, peas |
+-----+------------+---------+------------------+
已编辑
问题:如果期望的输出是这样的:
+-----+------------+-------------------+
| id | day | soup |
+-----+------------+---------+---------+
| 1 | Friday | potatoes, carrots |
+-----+------------+---------+---------+
| 2 | Saturday | carrots, peas |
+-----+------------+---------+---------+
| 3 | Sunday | potatoes, peas |
+-----+------------+---------+---------+
是的,如果每天有多汤,您将需要一个中间表。 您可以使用SELECT
语句中的GROUP_CONCAT
将所有汤混合一天。
http://dev.mysql.com/doc/refman/5.7/zh-CN/group-by-functions.html#function_group-concat
SELECT ma.id, ma.day, GROUP_CONCAT(DISTINCT so.soup) as soup
FROM main ma
LEFT JOIN soupmain sm ON(ma.id = sm.id_main)
LEFT JOIN soup so ON(so.id = sm.id_soup)
WHERE ma.id = 1
GROUP BY ma.id
您可以使用group_concat
SELECT ma.day, groupconcat(so.soup)
FROM main ma, soup so
WHERE ma.id_soup = so.id
AND ma.id = 1
group by ma.day
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.