SQL: отображение нескольких значений записи в одном поле из подзапроса

#mysql #sql

#mysql #sql

Вопрос:

У меня есть SQL, ПОДОБНЫЙ:

 SELECT S.*, 
   (SELECT I.NAME FROM institution I, inst_map IM 
           WHERE IM.STUDENT = S.ID AND IM.INSTITUTION = I.ID) as INSTITUTIONS 
FROM student S
  

В этом случае мой подзапрос может вернуть несколько записей (я получу сообщение об ошибке: Subquery returns more than 1 row ).

Как отобразить эти несколько значений из моего подзапроса в одном поле (в моем случае INSTITUTIONS ), разделенных запятыми?

Все идеи приветствуются.

Ответ №1:

Попробуйте этот запрос —

 SELECT s.*, GROUP_CONCAT(t.NAME) INSTITUTIONS FROM student s
  LEFT JOIN (SELECT * FROM institution i
              JOIN inst_map im
                ON im.INSTITUTION = i.ID
             ) t
  ON s.ID = t.STUDENT
GROUP BY s.ID
  

Функция GROUP_CONCAT поможет вам получить значения, разделенные запятыми.

Ответ №2:

 DECLARE @List VARCHAR(5000)
SELECT @List = COALESCE(@List   ', '   Display, Display)
FROM TestTable
Order By Display
  

запрос взят из следующей ссылки, и статья отлично объясняет запрос, я надеюсь, что это сработает
http://www.mitchelsellers.com/blogs/articletype/articleview/articleid/289/creating-comma-separated-list-in-sql.aspx

Я думаю, это для SQL Server