Результаты MySQL в виде списка через запятую - PullRequest
112 голосов
/ 19 марта 2009

Мне нужно выполнить запрос вроде:

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

Но я бы хотел, чтобы подчиненный элемент возвращал список, разделенный запятыми, а не столбец данных. Это вообще возможно, и если да, то как?

Ответы [ 3 ]

230 голосов
/ 19 марта 2009

Для этого можно использовать GROUP_CONCAT , например, что-то вроде

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;
8 голосов
/ 29 декабря 2012

Вместо использования group concat() вы можете использовать только concat()

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

редактировать это работает только в MySQL; Oracle concat принимает только два аргумента. В oracle вы можете использовать что-то вроде select col1 || ',' || col2 || ',' || col3 как foobar из таблицы1; на сервере sql вы бы использовали + вместо каналов.

3 голосов
/ 14 сентября 2017

В моем случае мне нужно объединить все номера счетов человека, чей номер мобильного телефона уникален. Поэтому я использовал следующий запрос для достижения этого.

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

Результат запроса ниже:

Accounts
93348001,97530801,93348001,97530801
89663501
62630701
6227895144840002
60070021
60070020
60070019
60070018
60070017
60070016
60070015
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...