SQL команда объединить несколько строк в одну ячейку? - PullRequest
1 голос
/ 04 ноября 2011

У меня есть таблица назначений групп пользователей, например:

ID----UserName------Group
01    johnsmith     admin
02    sarahwilles   admin
03    johnsmith     testuser

Я бы хотел отобразить это как:

UserName-------Groups
johnsmith      admin, testuser
sarahwilles    admin

Возможно ли это через SQL?

Ответы [ 4 ]

2 голосов
/ 04 ноября 2011

Это не является частью стандартного SQL, потому что он настолько открытый, что его трудно решить таким способом, который дает предсказуемый ответ.Неограниченное количество строк в основном является нормальной и ожидаемой частью SQL, но текстовые строки неограниченной длины - нет.group_concat () существует в mysql, но для меня это, как правило, промах для моих требований.Он делает единственное, что может, - обрезать результаты, если они превышают системный лимит, group_concat_max_len.Следовательно, он все еще требует дополнительного кода, чтобы вычислить длину «реального» результата и посмотреть, длиннее ли он, чем group_concat_max_len.Конечно, у вас могут быть некоторые другие ограничения, которые гарантируют, что это не будет проблемой, но, скорее всего, просто невероятно , а не невозможно иметь проблему из-за превышения group_concat_max_len.Кроме того, это означает, что вы должны в какой-то момент проверить значение group_concat_max_len в своем коде, потому что он настраивается и может измениться на более поздний срок.(), Я в конечном итоге обнаружил, что мне лучше написать что-то, что могло бы работать со всеми значениями в строках, а не объединять их в одну строку.Однако это может быть очень удобно, если вы просто возитесь в приглашении mysql>, изучая ваши данные.

1 голос
/ 04 ноября 2011

Не в стандартном SQL, но MySQL ** предоставляет GROUP_CONCAT, который будет делать именно то, что вы хотите.

SELECT foo, GROUP_CONCAT(DISTINCT bar ORDER BY bar) AS bars
FROM foo_table
LEFT JOIN bar_table ON bar_table.foo_id = foo_table.foo_id

** при условии, что это нормально, так как вы пометили вопрос mysql

0 голосов
/ 21 марта 2012

Попробуйте:

SELECT UserName, group_concat(group) allGroup
FROM tableAssignment
GROUP BY UserName

Надеюсь, это поможет.

0 голосов
/ 04 ноября 2011

SELECT DISTINCT имя пользователя, группа FROM table_name

...