2014-12-19 4 views
1

У меня есть две таблицы в зависимости от пользователя и группы пользователей, так что каждый пользователь может быть назначен одной или нескольким пользовательским группам. Таблица пользователя содержит внешний ключ как group_id, когда содержит значения, разделенные запятыми идентификатора userGroup. Я хочу получить данные пользователя и разделенное запятыми имя_группы, с которым он связан в одном запросе. Есть ли какой-нибудь метод, который я могу достичь в SQL? Поля таблицы пользователя являются: (идентификатор, uname, group_id) UserGroup: (идентификатор, group_name)Использовать подзапрос в WHERE caluse в mysql

То, что я хочу, я получаю uname, GROUP_NAME, user.id, group.id в одном запросе SQL.

Я пробовал следующий запрос, но он дает мне ошибку

SELECT t1.uname, group_concat(t.group_name) FROM user t1 
LEFT JOIN user_group t2 
ON t1.group_id = t2.id 
    WHERE t2.id IN t1.group_id 
+1

Исходя из @ user2864740 замечания, необходимо нормализовать в три таблицы - User (UserId, Имя), Group (GroupId, Name) и UserGroup (UserId, GroupId). – StuartLC

+0

Нормализовать ваши таблицы. Использование разделенных запятыми списков для хранения внешнего ключа приведет к множеству проблем и низкой производительности запросов. – user4035

ответ

1

Попробуйте это:

SELECT t1.uname, GROUP_CONCAT(t.group_name) AS group_name 
FROM user t1 
LEFT JOIN user_group t2 ON FIND_IN_SET(t2.id, t1.group_id) 
GROUP BY t1.id; 
+1

спасибо, он решает мою проблему –

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