web-dev-qa-db-fra.com

MySQL GROUP_CONCAT avec Nulls

Existe-t-il une option pour que la fonction Group_Concat de MySQL inclue des valeurs nulles?

Prenons l'exemple suivant de ma table source:

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

Lorsque j'interroge sur la table de sélection avec GROUP_CONCAT, j'obtiens ce qui suit:

7, 4=1,5=2

Je souhaite obtenir ce qui suit:

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

Pour référence, ma requête ressemble à ceci:

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

J'ai également essayé d'ajouter un IFNULL comme ceci:

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

mais cela a produit ce qui suit:

7, NULL,4=1,5=2

Remarque - Il y a une autre complexité que j'ai oublié d'inclure. Le selectionId est une clé étrangère vers une autre table. J'utilise une jointure externe gauche à la table selection_text. Ma vraie requête inclut des champs de cette table (ces champs se résolvent à NULL puisque le selectionId est nul).

24
David

Vous devriez juste IFNULL la colonne qui peut être NULL;

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

Démo ici .

37
Joachim Isaksson

Vous devez utiliser IFNULL ou COALESCE directement sur la valeur selectionId:

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