Mysql 在子选择中使用 GROUP_CONCAT

标签 mysql sql select group-concat subquery

我在 mysql 中的子选择有问题。在餐 table 餐厅中,我有“sup”字段,其中 ID 之间用逗号分隔。 基本选择:

mysql> select name, sup from restaurants LIMIT 5;
+-------------------------------------+---------+
| name                                | sup     |
+-------------------------------------+---------+
| Pizzerija in špagetarija Buf        | 2,14,18 |
| EJGA - KAVARNA - RESTAVRACIJA - PUB | 11,17   |
| Restavracija Center                 | 5,22    |
| Restavracija Viola                  | 5,13,17 |
| Gostilna Anderlič                   | 5,17    |
+-------------------------------------+---------+
5 rows in set (0.00 sec)

我想知道suply表中的字段“SI”以获取sup.restaurants表中的ID。所以我的选择是:

mysql> SELECT GROUP_CONCAT(suply.SI SEPARATOR ', ')  FROM `suply` WHERE id IN (2,14,18);
+---------------------------------------+
| GROUP_CONCAT(suply.SI SEPARATOR ', ') |
+---------------------------------------+
| Italijanska, Špagetarija, Picerija    |
+---------------------------------------+
1 row in set (0.00 sec)

所以我用 subselct 写了 select 但效果不好:

mysql> SELECT restaurants.name,
    -> (SELECT GROUP_CONCAT(suply.SI SEPARATOR ', ')  FROM `suply` WHERE id IN (restaurants.sup)) AS hrana
    ->  FROM restaurants
    ->  LIMIT 5;
+-------------------------------------+--------------------+
| name                                | hrana              |
+-------------------------------------+--------------------+
| Pizzerija in špagetarija Buf        | Italijanska        |
| EJGA - KAVARNA - RESTAVRACIJA - PUB | Mednarodna kuhinja |
| Restavracija Center                 | Slovenska domača   |
| Restavracija Viola                  | Slovenska domača   |
| Gostilna Anderli?                   | Slovenska domača   |
+-------------------------------------+--------------------+
5 rows in set (0.00 sec)

为什么在这个选择中我只得到第一个字符串?

最佳答案

使用FIND_IN_SET在逗号分隔列表中搜索的函数

WHERE FIND_IN_SET(id, restaurants.sup)

关于Mysql 在子选择中使用 GROUP_CONCAT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25120447/

相关文章:

mysql - 如何查看slave是否开始与master进行复制以及复制状态如何?使用mysql db完成了多少?

sql - 使用临时表中的 ID 更新实际表

mysql - 选择具有重复数据的行

php - 使用 PHP 计算 Oracle 中所选行的数量

Java使用switch只显示一个SQL结果

mysql - SQL,如何计算范围内的行数

java - 使用 MySQL 运行 Hibernate 5 的 Maven 依赖项是什么?

php - 在 yii2 中制作表格失败

php - PHP/MySQL 中的食谱查找器允许按成分过滤

mysql - 在Mysql中查找值何时交叉?