在子选择中带有 GROUP_CONCAT 的 Mysql

Posted

技术标签:

【中文标题】在子选择中带有 GROUP_CONCAT 的 Mysql【英文标题】:Mysql with GROUP_CONCAT in subselect 【发布时间】:2014-09-27 00:44:48 【问题描述】:

我在 mysql 中遇到子选择问题。在餐桌餐厅中,我有字段“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)

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

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)

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

【问题讨论】:

在哪个选择中你得到第一个字符串?第一个字符串是什么意思? 您应该规范化您的数据(如果可以的话)以避免此类问题。将逗号分隔的列表存储在一列中会导致大部分时间出现问题。请改用联结表。 【参考方案1】:

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

WHERE FIND_IN_SET(id, restaurants.sup)

【讨论】:

以上是关于在子选择中带有 GROUP_CONCAT 的 Mysql的主要内容,如果未能解决你的问题,请参考以下文章

JPQL 中带有 JPA 的本机查询的“GROUP_CONCAT”是不是有替代方案?

SQL试图在子查询中使用联接表中的列

引用 R 中带有空格的对象

Vue.js:在 v-on:event 或 @event 中带有参数的匿名函数

在 Redshift Spectrum 中选择带有连字符的字段

mysql中对于 GROUP_CONCAT 函数的长度限制处理