2015-08-23 6 views
0

Мои таблицы:SQL запрос, чтобы объединить переменное число строк в одну строку

people 
     name  person_id 
     Joe  1 
     Jack 2 

tags 
     tag_id tag_name 
      1  blue 
      2  green 
      3  black 
      4  red 

assignments 
     person_id tag_id 
      1  1 
      1  2 
      1  3 
      1  4 
      2  2 
      2  4 

То, что я хочу, это следующий результат:

результат

name tags 
    Joe blue,green.black,red 
    Jack green,red 

Что уникально здесь что третья таблица требует, чтобы я сначала присоединился к названиям тегов, и я не конкатенировал их, а не сырые идентификаторы ...

+0

где сложный запрос? – whereisSQL

+1

@whereisSQL 404 error – asdf

+2

Возможный дубликат [Можно ли объединить несколько строк MySQL в одно поле?] (Http://stackoverflow.com/questions/276927/can-i-concatenate-multiple-mysql-rows-into-one- поле) –

ответ

3

Используйте метод GROUP_CONCAT() в сочетании с GROUP BY

SELECT name, GROUP_CONCAT(tag_id) FROM people GROUP BY name; 

Для редактируемой секции, попробуйте следующее:

SELECT p.name, GROUP_CONCAT(t.tag_name) 
    FROM people p 
     JOIN assignments a ON p.person_id=a.person_id 
     JOIN tags t ON t.tag_id=a.tag_id 
    GROUP BY a.person_id; 
+0

@ J.Doe Если вы могли бы добавить еще одну часть в свой оригинальный вопрос, отражающий новый запрос, я мог бы попробовать и помочь. – asdf

+0

@ J.Doe Модифицировано, дайте мне знать, если это работает – asdf

+0

В общем, это хорошая практика для GROUP BY неагрегированными столбцами, появляющимися в SELECT – Strawberry

0
SELECT p.name 
, CONCAT_GROUP(t.tag_id SEPARATOR ',') 
FROM tag t, person p 
WHERE t. tag_id = p. tag_id 
GROUP BY p. name 

Я надеюсь, что это может помочь

+0

. Я действительно не буду поощрять использование этого архаичного синтаксиса соединения. – Strawberry

Смежные вопросы