繁体   English   中英

连接两个表并从一个表中获取一组值

[英]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.

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