Ich muss eine Abfrage ausführen wie:
SELECT p.id, p.name,
(SELECT name
FROM sites s
WHERE s.id = p.site_id) AS site_list
FROM publications p
Ich möchte jedoch, dass die Unterauswahl anstelle einer Datenspalte eine durch Kommas getrennte Liste zurückgibt. Ist das überhaupt möglich und wenn ja, wie?
sql
mysql
concatenation
Glen Solsberry
quelle
quelle
GROUP_CONCAT(CAST(s.name AS CHAR))
sonst nur etwas völlig Unnützes zurückgegeben wird[BLOB - 20 Bytes]
.Anstatt zu verwenden
group concat()
, können Sie nur verwendenconcat()
Bearbeiten funktioniert nur in mySQL; Oracle Concat akzeptiert nur zwei Argumente. In Orakel können Sie so etwas wie select col1 || ',' || col2 || ',' || col3 als foobar aus table1 verwenden; In SQL Server würden Sie + anstelle von Pipes verwenden.
quelle
Jetzt bin nur ich auf diese Situation gestoßen und habe einige interessantere Funktionen gefunden
GROUP_CONCAT
. Ich hoffe, dass Sie sich durch diese Details interessant fühlen.einfache GROUP_CONCAT
Ergebnis:
GROUP_CONCAT mit DISTINCT
Ergebnis:
GROUP_CONCAT mit DISTINCT und ORDER BY
Ergebnis:
GROUP_CONCAT mit DISTINCT und SEPARATOR
Ergebnis:
GROUP_CONCAT und Kombinieren von Spalten
Ergebnis:
GROUP_CONCAT und gruppierte Ergebnisse Nehmen Sie an, dass die folgenden Ergebnisse vor der Verwendung vorliegen
GROUP_CONCAT
Ergebnis:
quelle
In meinem Fall muss ich die gesamte Kontonummer einer Person verketten, deren Handynummer eindeutig ist. Also habe ich die folgende Abfrage verwendet, um das zu erreichen.
Das Abfrageergebnis ist unten:
quelle