J'ai besoin d'exécuter une requête comme:
SELECT p.id, p.name,
(SELECT name
FROM sites s
WHERE s.id = p.site_id) AS site_list
FROM publications p
Mais j'aimerais que la sous-sélection renvoie une liste séparée par des virgules, au lieu d'une colonne de données. Est-ce même possible, et si oui, comment?
sql
mysql
concatenation
Glen Solsberry
la source
la source
GROUP_CONCAT(CAST(s.name AS CHAR))
ou bien cela retournera simplement quelque chose de totalement inutile comme[BLOB - 20 Bytes]
.Au lieu d'utiliser,
group concat()
vous pouvez utiliser uniquementconcat()
modifier cela ne fonctionne que dans mySQL; Oracle concat n'accepte que deux arguments. Dans oracle, vous pouvez utiliser quelque chose comme select col1 || ',' || col2 || ',' || col3 comme foobar de table1; dans le serveur SQL, vous utiliseriez + au lieu de tubes.
la source
Maintenant seulement je suis tombé sur cette situation et j'ai trouvé des fonctionnalités plus intéressantes
GROUP_CONCAT
. J'espère que ces détails vous feront vous sentir intéressant.GROUP_CONCAT simple
Résultat:
GROUP_CONCAT avec DISTINCT
Résultat:
GROUP_CONCAT avec DISTINCT et ORDER BY
Résultat:
GROUP_CONCAT avec DISTINCT et SEPARATOR
Résultat:
GROUP_CONCAT et combinaison de colonnes
Résultat:
GROUP_CONCAT et résultats groupés Supposons que les résultats suivants sont les résultats avant utilisation
GROUP_CONCAT
Résultat:
la source
Dans mon cas, je dois concaténer tout le numéro de compte d'une personne dont le numéro de portable est unique. J'ai donc utilisé la requête suivante pour y parvenir.
Le résultat de la requête est ci-dessous:
la source