如何使用逗号分隔和没有重复字段显示sql辅助字段

时间:2017-03-11 20:34:43

标签: mysql sql

我有这张表:

TABLE tema

+---------+-------------+
| tema_id | nombre      |
+---------+-------------+
|       1 | Aprender    |
|       4 | Justicia    |
|       2 | Pensamiento |
|       3 | Vida        |
+---------+-------------+

TABLE frase

+----+----------+----------------------------------------+
| id | autor_id | texto                                  |
+----+----------+----------------------------------------+
|  1 |        2 | Pienso, luego existo                   |
|  2 |        1 | Aprender sin pensar es trabajo perdido |
+----+----------+----------------------------------------+

表tema_frase(与表frase和tema的关系)

+----------+---------+
| frase_id | tema_id |
+----------+---------+
|        1 |       2 |
|        2 |       1 |
|        2 |       2 |
+----------+---------+

所以当我执行此咨询时:

SELECT frase.texto, tema.nombre 
FROM tema_frase INNER JOIN
     tema 
     ON tema_frase.tema_id = tema.tema_id INNER JOIN
     frase 
     ON frase.id = tema_frase.frase_id

我明白了:

+----------------------------------------+-------------+
| texto                                  | nombre      |
+----------------------------------------+-------------+
| Pienso, luego existo                   | Pensamiento |
| Aprender sin pensar es trabajo perdido | Aprender    |
| Aprender sin pensar es trabajo perdido | Pensamiento |
+----------------------------------------+-------------+

我的问题是,如何以这种方式展示咨询?

+----------------------------------------+-----------------------+
| texto                                  | nombre                |
+----------------------------------------+-----------------------+
| Pienso, luego existo                   | Pensamiento           |
| Aprender sin pensar es trabajo perdido | Pensamiento, Aprender |
+----------------------------------------+-----------------------+

1 个答案:

答案 0 :(得分:0)

您可能希望对结果进行分组并使用group_concat来连接名称:

SELECT frase.texto,group_concat(tema.nombre separator ", ")
FROM tema_frase 
INNER JOIN tema 
ON  tema_frase.tema_id=tema.tema_id 
INNER JOIN frase 
ON frase.id=tema_frase.frase_id
GROUP BY frase.texto

您也可以按字母顺序排序并使用group_concat避免重复:

SELECT frase.texto,group_concat(DISTINCT tema.nombre separator ", " ORDER BY tema.nombre ASC)
FROM tema_frase 
INNER JOIN tema 
ON  tema_frase.tema_id=tema.tema_id 
INNER JOIN frase 
ON frase.id=tema_frase.frase_id
GROUP BY frase.texto