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?

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top