varios una sola resultados registros group_concat filas consulta concatenar columna cadena mysql database-design select join

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)