Мне нужно выполнить такой запрос:
SELECT p.id, p.name,
(SELECT name
FROM sites s
WHERE s.id = p.site_id) AS site_list
FROM publications p
Но я бы хотел, чтобы подвыбор возвращал список, разделенный запятыми, а не столбец данных. Возможно ли это вообще, и если да, то как?
sql
mysql
concatenation
Глен Солсберри
источник
источник
GROUP_CONCAT(CAST(s.name AS CHAR))
иначе он просто вернет что-то совершенно бесполезное, например[BLOB - 20 Bytes]
.Вместо использования
group concat()
вы можете использовать простоconcat()
изменить это работает только в mySQL; Oracle concat принимает только два аргумента. В oracle вы можете использовать что-то вроде select col1 || ',' || col2 || ',' || col3 как foobar из table1; на сервере sql вы использовали бы + вместо каналов.
источник
Только сейчас я столкнулся с этой ситуацией и нашел еще несколько интересных особенностей вокруг
GROUP_CONCAT
. Надеюсь, эти детали заставят вас почувствовать себя интересными.простой GROUP_CONCAT
Результат:
GROUP_CONCAT с DISTINCT
Результат:
GROUP_CONCAT с DISTINCT и ORDER BY
Результат:
GROUP_CONCAT с DISTINCT и SEPARATOR
Результат:
GROUP_CONCAT и объединение столбцов
Результат:
GROUP_CONCAT и сгруппированные результаты Предположим, что следующие результаты перед использованием
GROUP_CONCAT
Результат:
источник
В моем случае я должен объединить весь номер счета человека, номер мобильного телефона которого уникален. Поэтому для этого я использовал следующий запрос.
Результат запроса ниже:
источник