2011-12-01 14 views
8

Actualmente tengo algunos sql que devuelve etiquetas. que deben tener los identificadores distintos, pero no .... así que mi actual de datos es como:mysql selecciona filas distintas en una columna de lista delimitada por comas

Microsoft | GGG | 1 | 167 
Microsoft | GGG | 1 | 2 
Microsoft | GGG | 1 | 1 

lo que me gustaría hacer es tener sólo una fila volver con la última columna concatenan en un delimitado lista como:

Microsoft | GGG | 1 | 167, 2, 1 

Estoy utilizando mySQL 5 para esto.

+0

no sé lo que está pidiendo en su bandera. Si hizo una pregunta incorrecta, evalúe la (s) respuesta (es) proporcionada (s), vea si responde la pregunta que hizo aquí, y cierre la pregunta seleccionando la respuesta correcta. A continuación, puede ir a hacer su pregunta * real *. – Will

Respuesta

21

Uso GROUP_CONCAT() para esto, con un GROUP BY cubriendo las otras tres columnas:

SELECT 
    name, -- Microsoft 
    other, -- GGG 
    other2, -- 1 
    GROUP_CONCAT(id) AS ids 
FROM tbl 
GROUP BY name, other, other2 
+0

Y en el caso de que 'ids' sea un conjunto grande, no olvide establecer un valor lo suficientemente grande para:' SET SESSION group_concat_max_len = 1000000; ' – bishop

+0

Esto no da valores distintos. – geoidesic

+0

@geoidesic No estoy seguro de a qué te refieres. La pregunta no pedía valores distintos, pero si lees [el 'GROUP_CONCAT()' docs] (https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html# function_group-concat) encontrará que admite una palabra clave 'DISTINCT' para deduplicar su valor de retorno de cadena. –

Cuestiones relacionadas