Pergunta

Eu preciso executar uma consulta como:

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

Mas eu gostaria que o sub-seleccionar para retornar uma lista separada por vírgula, em vez de uma coluna de dados. Isso é possível, e se assim for, como?

Foi útil?

Solução

Você pode usar GROUP_CONCAT para executar que, por exemplo, algo como

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;

Outras dicas

Em vez de usar group concat() você pode usar apenas concat()

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

editar este só funciona no MySQL; A Oracle concat só aceita dois argumentos. No oráculo que você pode usar algo como select col1 || ' '|| col2 ||',' || col3 como foobar da tabela1; no sql server você usaria + em vez de tubos.

No meu caso eu tenho que concatenar todo o número de conta de uma pessoa que é o número móvel é único. Então eu usei a seguinte consulta para conseguir isso.

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

Consulta resultado está abaixo:

Accounts
93348001,97530801,93348001,97530801
89663501
62630701
6227895144840002
60070021
60070020
60070019
60070018
60070017
60070016
60070015
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top