MySQL Ergebnisse als durch Kommata getrennte Liste
-
20-08-2019 - |
Frage
Ich brauche eine Abfrage wie ausgeführt wird:
SELECT p.id, p.name,
(SELECT name
FROM sites s
WHERE s.id = p.site_id) AS site_list
FROM publications p
Aber ich mag die Unterauswahl eine durch Kommata getrennte Liste, anstelle einer Spalte von Daten zurückzukehren. Ist das überhaupt möglich ist, und wenn ja, wie?
Lösung
Sie können mit GROUP_CONCAT auszuführen, dass beispiel so etwas wie
SELECT p.id, p.name, GROUP_CONCAT(s.name) AS site_list
FROM sites s
INNER JOIN publications p ON(s.id = p.site_id)
GROUP BY p.id, p.name;
Andere Tipps
Statt group concat()
verwenden Sie können nur concat()
verwenden
Select concat(Col1, ',', Col2) as Foo_Bar from Table1;
Bearbeiten nur in mySQL arbeitet; Oracle concat akzeptiert nur zwei Argumente. In Oracle können Sie so etwas wie select col1 verwenden || ' '|| || col2',' || col3 wie foobar aus table1; in SQL Server würden Sie + anstelle von Rohren verwendet werden.
In meinem Fall habe ich alle die Kontonummer einer Person verketten, die Handynummer einzigartig ist. So habe ich die folgende Abfrage verwendet, das zu erreichen.
SELECT GROUP_CONCAT(AccountsNo) as Accounts FROM `tblaccounts` GROUP BY MobileNumber
Abfrageergebnis ist unter:
Accounts
93348001,97530801,93348001,97530801
89663501
62630701
6227895144840002
60070021
60070020
60070019
60070018
60070017
60070016
60070015