una - group_concat mysql
¿Es posible concatenar cadenas de múltiples filas y tablas en una columna de resultados? (2)
No sé si funciona en MySQL, pero en SQL Server puedes usar un truco para esto:
DECLARE @csv varchar(max)
SET @csv = ''''
SELECT @csv = @csv + '','' + foo.SomeColumn
FROM [FOO] foo
WHERE foo.SomeId = @SomeId
Luego, en la selección principal
SELECT ..., @csv AS [Tags]
FROM ...
El resultado de SELECT @csv = @csv + '','' + foo.SomeColumn
es que @csv
convierte en la lista separada por comas de todos los registros coincidentes de la tabla fuente (después del predicado).
Vale la pena probar en MySQL?
Estoy tratando de escribir una consulta MySQL que recupera un registro de la tabla "proyectos" que tiene una relación de uno a muchos con las "etiquetas" de la tabla. Mi aplicación usa 4 tablas para hacer esto:
Projects - the projects table
Entities - entity table; references several application resources
Tags - tags table
Tag_entity - links tags to entities
¿Es posible escribir la consulta de tal manera que múltiples valores de la tabla "Etiquetas" se concatenan en una columna de resultados? Prefiero hacer esto sin usar subconsultas.
Aclaración de la tabla:
-------------
| Tag_Entity |
------------- ---------- | ----------- | -------
| Projects | | Entities | | - id | | Tags |
| ----------- | | -------- | | - tag_id | | ----- |
| - id | --> | - id | --> | - entity_id | --> | id |
| - entity_id | ---------- ------------- | name |
------------- -------
Resultado deseado:
Projects.id Entities.id Tags.name (concatenated)
1 5 ''foo'',''bar'',''etc''
ver GROUP_CONCAT
ejemplo:
mysql> SELECT * FROM blah;
+----+-----+-----------+
| K | grp | name |
+----+-----+-----------+
| 1 | 1 | foo |
| 2 | 1 | bar |
| 3 | 2 | hydrogen |
| 4 | 4 | dasher |
| 5 | 2 | helium |
| 6 | 2 | lithium |
| 7 | 4 | dancer |
| 8 | 3 | winken |
| 9 | 4 | prancer |
| 10 | 2 | beryllium |
| 11 | 1 | baz |
| 12 | 3 | blinken |
| 13 | 4 | vixen |
| 14 | 1 | quux |
| 15 | 4 | comet |
| 16 | 2 | boron |
| 17 | 4 | cupid |
| 18 | 4 | donner |
| 19 | 4 | blitzen |
| 20 | 3 | nod |
| 21 | 4 | rudolph |
+----+-----+-----------+
21 rows in set (0.00 sec)
mysql> SELECT grp, GROUP_CONCAT(name ORDER BY K) FROM blah GROUP BY grp;
+-----+----------------------------------------------------------------+
| grp | GROUP_CONCAT(name ORDER BY K) |
+-----+----------------------------------------------------------------+
| 1 | foo,bar,baz,quux |
| 2 | hydrogen,helium,lithium,beryllium,boron |
| 3 | winken,blinken,nod |
| 4 | dasher,dancer,prancer,vixen,comet,cupid,donner,blitzen,rudolph |
+-----+----------------------------------------------------------------+
4 rows in set (0.00 sec)