SQL объединяет столбец DISTINCT и отдельный столбец запятой в список с другой таблицей [duplicate]

Как было сказано ранее, он оценивает все утверждения, но использует последнее в качестве значения выражения. Лично я нашел его полезным в выражениях цикла:

for (tmp=0, i = MAX; i > 0; i--)
106
задан O. Jones 13 October 2014 в 23:18
поделиться

3 ответа

Вы можете использовать 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;
219
ответ дан Paul Dixon 22 August 2018 в 22:09
поделиться
  • 1
    Отлично Это сработало для меня Спасибо !!!!! – Devjosh 28 June 2011 в 09:39
  • 2
    Кроме того, обратите внимание, что если вы используете PHPMyAdmin и хотите вывести на страницу список с разделителями-запятыми, используйте GROUP_CONCAT(CAST(s.name AS CHAR)), иначе он просто вернет что-то совершенно неиспользуемое, как [BLOB - 20 Bytes]. – devios1 1 March 2012 в 17:52
  • 3
    Цель прекрасна, и MySQL это позволит, но будьте осторожны (в общем) с использованием GROUP BY. Элементы в списке выбора должны быть действительными агрегатами в контексте предложения GROUP BY. В этом случае p.name не является строго верным. Любая база данных, соответствующая стандарту SQL, будет рассматривать это как ошибку. Для этого случая либо используйте MAX (p.name) в списке выбора, либо добавьте p.name в предложение GROUP BY. Поскольку Павел, вероятно, означает, что p.id представляет первичный или уникальный ключ, добавление p.name в предложение GROUP BY не окажет никакого влияния на конечный результат. – Jon Armstrong - Xgc 13 October 2012 в 02:45
  • 4
    Обратите внимание, что вам может потребоваться установить максимальную длину для сеанса на stackoverflow.com/questions/2567000/… – sobelito 20 March 2015 в 19:55
  • 5
    Огромное спасибо! Вы мне очень помогли! – André Agostinho 18 December 2017 в 17:29

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

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

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

8
ответ дан Robert Quinn 22 August 2018 в 22:09
поделиться
  • 1
    То, что мне нужно, спасибо! – Scott Rowley 18 June 2014 в 18:43
  • 2
    Это не должно работать в случае GROUP BY, тогда как GROUP_CONCAT () будет конкатенатировать содержимое одного столбца – Aram Paronikyan 28 June 2016 в 10:58

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

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
1
ответ дан Vignesh Waran 22 August 2018 в 22:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: