如何将多个MySQL行连接到一个字段中?

时间:2017-12-21 15:13:54

标签: mysql sql concat

使用MySQL,我可以执行以下操作:

SELECT c.id_category, c.id_category_type, c.label, c.id_parent
FROM category c
WHERE  c.id_category_type < 3 
ORDER BY c.id_category_type;

结果是:

id_category |id_category_type |label                 |id_parent |
------------|-----------------|----------------------|----------|
1           |1                |Demande d'information |-1        |
2           |1                |Réclamation           |-1        |
18          |1                |TEST                  |-1        |
3           |2                |Autre                 |1         |
4           |2                |Mairie                |1         |
5           |2                |Stationnement         |1         |
6           |2                |Autre                 |2         |
7           |2                |Familles              |2         |
19          |2                |TESTDOMAINE           |18        |

但我只想要concatid_category id_parent

实施例

Autre-Demande d'information
Mairie-Demande d'information
Stationnement-Demande d'information
Autre-Réclamation
Familles-Réclamation
TESTDOMAINE-TEST

我在MySQL Doc上找了一个函数,它看起来不像CONCATCONCAT_WS函数接受结果集,所以这里的任何人都知道如何做到这一点吗?

1 个答案:

答案 0 :(得分:2)

测试一下:

SELECT category.id_category, category.id_category_type, 
CONCAT(category.label, '-', parents.label), category.id_parent  FROM category INNER JOIN
(SELECT id_category AS id, label FROM category WHERE id_parent = -1) AS parents
ON parents.id = category.id_parent WHERE  category.id_category_type < 3 
ORDER BY category.id_category_type;

您的数据混合了“父行”和“子行”:当寄存器的id_parent = -1时,我认为是父行,而当id_parent&lt;&gt; -1是子行。

您正在请求结果列加入“childs rows”和“parents rows”中的“label”列,然后它的necesary构建一个“父表”,这是通过以下方式实现的:

(SELECT id_category AS id, label FROM category WHERE id_parent = -1) AS parent

然后您可以像使用任何其他表一样使用“父”表并构建您的连接查询