2014-02-20 229 views
0

對於所有的hibernate和SQL作用域,我都很新穎,所以請原諒我這個愚蠢的問題。按結果查詢SQL組

我想打一個SQL查詢中使用Hibernate這將組中的所有結果由groupUserName。

我在DB下表:

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。

它是什麼,其實帶回的是:

鮑勃 - >測試。

Charlie - > TEST。

哪裏TEST2?

你能幫我嗎?我想念什麼?

非常感謝!

+1

首先考慮的不是命名'Group'等你桌上的東西;這是一個保留字。 –

+0

在這樣的例子中,你可以給一個SQL小提琴。鏈接在這裏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下。我的意思是,我會用('TEST'和'TEST2')和1'Charlie'來測試1'BOB'。可能嗎? – yanivsh

+0

是的,非常容易。查看編輯 –

+0

非常感謝!不能投票,因爲我沒有足夠的聲譽:( – yanivsh

0

只需簡單地在group by加 「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