Результаты MySQL в виде списка, разделенного запятыми

StackOverflow https://stackoverflow.com/questions/662207

  •  20-08-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

Вы можете использовать ГРУППА_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;

Другие советы

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

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

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

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

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top