2012-04-26 35 views
20

¿Existe alguna opción para hacer que la función Group_Concat de MySQL incluya valores nulos?MySQL GROUP_CONCAT con valores nulos

Considérese el siguiente ejemplo de mi tabla de origen:

userId, questionId, selectionId 
7, 3, NULL 
7, 4, 1 
7, 5, 2 

Cuando consulta en la tabla de selección con GROUP_CONCAT, me sale el siguiente:

7, 4=1,5=2 

me gustaría obtener la siguiente:

7, 3=NULL,4=1,5=2 

como referencia, mi consulta es la siguiente:

Select userId, GROUP_CONCAT(CONCAT(questionId, '=', selectionId)) 
From selection 
Group by userId; 

También probé la adición de un IFNULL así:

Select userId, GROUP_CONCAT(IFNULL(CONCAT(questionId, '=', selectionId), 'NULL')) 
From selection 
Group by userId; 

pero que produjo el siguiente:

7, NULL,4=1,5=2 

Nota - Hay otra complejidad que se me olvidó incluir. El Id de selección es una clave externa a otra tabla. Uso una combinación externa izquierda a la tabla selection_text. Mi consulta real incluye campos de esa tabla (estos campos se resuelven en NULL ya que selectionId es nulo).

+0

Producido como debería, pruebe IFNULL en selectionId, no en CONCAT. – piotrm

+0

Eso funcionó. Gracias. – David

+0

Pero en general, evite el uso de Group Concat. – IcedDante

Respuesta

22

Usted sólo debe IFNULL la columna que puede ser NULL;

SELECT userId, GROUP_CONCAT(CONCAT(questionId, '=', 
       IFNULL(selectionId, 'NULL'))) 
FROM selection 
GROUP BY userId; 

Demostración here.

+0

Acabo de tener este problema. Impresionante respuesta. Ahora he aprendido algo nuevo para hoy :) – b3tac0d3

2

Debe utilizar IFNULL o COALESCE en el valor selectionId directamente:

SELECT 
    userId, 
    GROUP_CONCAT(CONCAT(questionId, '=', COALESCE(selectionId, 'NULL'))) 
FROM selection 
GROUP BY userId;