2014-02-20 4 views
0

Im совершенно новая для всех областей hibernate и SQL, так что простите меня за глупый вопрос.Группа запросов SQL по результатам

Я хочу сделать запрос sql, используя спящий режим, который сгруппирует все результаты с помощью имени groupUserName.

У меня есть следующие таблицы в моей БД:

ms_GroupUser:

+-------------+---------------+----------+---------+ 
| groupUserId | groupUserName | password | groupId | 
+-------------+---------------+----------+---------+ 
|   1 | Alice   | 123456 |  1 |     
|   2 | BOB   | 654321 |  1 | 
|   3 | BOB   | 654321 |  2 | 
|   4 | Charlie  | 654321 |  1 | 
+-------------+---------------+----------+---------+ 

ms_Group:

+---------+-----------+--------+----------------+------------+ 
| groupId | groupName | system | systemHostName | systemPort | 
+---------+-----------+--------+----------------+------------+ 
|  1 | TEST  | FOO | 1.1.1.1  |  8080 | 
|  2 | TEST2  | FOO | 1.1.1.1  |  8080 | 
+---------+-----------+--------+----------------+------------+ 

Мой запрос является:

SELECT groupt.groupname, 
     usert.groupusername 
FROM ms_group AS groupt, 
     ms_groupuser AS usert 
WHERE groupt.groupid = usert.groupid 
     AND usert.password = '654321' 
GROUP BY usert.groupusername 

Я ожидаю, что это будет верните меня в качестве результат этот мешок:

BOB -> TEST, TEST2.

Charlie -> TEST.

Что это на самом деле вернуть есть:

BOB -> TEST.

Charlie -> TEST.

Где находится TEST2?

Не могли бы вы помочь мне? я чего-то упустил?

спасибо!

+1

Прежде всего рассмотреть вопрос о именовании таблицы нечто иное, чем 'Group'; это зарезервированное слово. –

+0

В таких примерах вы можете указать SQL Fiddle. Ссылка находится здесь http://sqlfiddle.com/ – Anoop

+0

Это не фактическое имя таблицы. Это просто для облегчения описания моих сущностей в вопросе. Как это помогает мне решить проблему? – yanivsh

ответ

2
SELECT groupUserName,groupName 
FROM ms_GroupUser u, ms_group g 
WHERE g.groupId=u.groupId 
AND u.password=654321 

Выход

| GROUPUSERNAME | GROUPNAME | 
|---------------|-----------| 
|   BOB |  TEST | 
|   BOB |  TEST2 | 
|  Charlie |  TEST | 

Fiddle

Редактировать

Основываясь на ваш вопрос в комментариях

SELECT groupUserName,GROUP_CONCAT(groupName) 
FROM ms_GroupUser u, ms_group g 
WHERE g.groupId=u.groupId AND u.password=654321 
GROUP BY groupUserName 

Выход

| GROUPUSERNAME | GROUP_CONCAT(GROUPNAME) | 
|---------------|-------------------------| 
|   BOB |    TEST,TEST2 | 
|  Charlie |     TEST | 

Fiddle

+0

Хорошо спасибо! Теперь я хочу объединить эти результаты под именем groupUserName, когда вы написали. Я имею в виду, что у меня будет 1 «BOB» с («TEST» и «TEST2») и 1 «Charlie» с («TEST»). Является ли это возможным? – yanivsh

+0

Да, очень легко. См. Редактирование –

+0

Большое спасибо! Не могу голосовать, так как у меня недостаточно репутации :( – yanivsh

0

Просто добавьте "groupt.groupName" в группе по. Таким образом, код будет как этот

SELECT groupt.groupName, 
     usert.groupUserName 
FROM Group1 AS groupt, 
     GroupUser AS usert 
WHERE groupt.groupId = usert.groupId 
AND usert.password = '654321' 
GROUP BY groupt.groupName, 
     usert.groupUserName; 
0
SELECT A.groupUserName,B.groupName 
FROM ms_GroupUser A LEFT JOIN ms_Group B 
ON A.groupID=B.groupID 
Смежные вопросы