Domanda

Devo eseguire una query come:

SELECT p.id, p.name, 
       (SELECT name 
          FROM sites s 
         WHERE s.id = p.site_id) AS site_list
  FROM publications p

Ma vorrei che la sottoselezione restituisse un elenco separato da virgole, anziché una colonna di dati. È anche possibile, e se sì, come?

È stato utile?

Soluzione

Puoi utilizzare GROUP_CONCAT per eseguire ciò, ad es qualcosa come

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;

Altri suggerimenti

Invece di usare group concat() puoi usare solo concat()

Select concat(Col1, ',', Col2) as Foo_Bar from Table1;

modifica questo funziona solo in mySQL; Oracle concat accetta solo due argomenti. In Oracle puoi usare qualcosa come select col1 || ',' || col2 || ',' || col3 come foobar dalla tabella1; in SQL Server useresti + invece di pipe.

Nel mio caso devo concatenare tutto il numero di conto di una persona il cui numero di cellulare è univoco. Quindi ho usato la seguente query per farlo.

SELECT GROUP_CONCAT(AccountsNo) as Accounts FROM `tblaccounts` GROUP BY MobileNumber

Il risultato della query è di seguito:

Accounts
93348001,97530801,93348001,97530801
89663501
62630701
6227895144840002
60070021
60070020
60070019
60070018
60070017
60070016
60070015
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top