简体   繁体   English

SQL查询组的结果

[英]SQL query group by results

Im quite new for all the hibernate and SQL scopes, so forgive me for the silly question. 我对所有的hibernate和SQL范围都很新,所以请原谅我这个愚蠢的问题。

I want to make a sql query using hibernate which will group all the results by the groupUserName. 我想使用hibernate进行sql查询,它将使用groupUserName对所有结果进行分组。

I have the following tables in my DB: 我的数据库中有以下表格:

ms_GroupUser: ms_GroupUser:

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

ms_Group: ms_Group:

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

My Query is: 我的查询是:

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 

I expect it will bring me back as a result this bag: 我希望它会让我回到这个包里:

BOB -> TEST, TEST2. BOB - > TEST,TEST2。

Charlie -> TEST. 查理 - >测试。

What it is actually bring back is: 实际带来的是:

BOB -> TEST. BOB - > TEST。

Charlie -> TEST. 查理 - >测试。

Where is TEST2? TEST2在哪里?

Can you please help me? 你能帮我么? am I miss understood something? 我想念一些东西吗?

Thank you very much! 非常感谢你!

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

Output 产量

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

Fiddle 小提琴

Edit 编辑

Based upon your question in comments 根据您在评论中提出的问题

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

Output 产量

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

Fiddle 小提琴

Just simply add "groupt.groupName" in the group by. 只需在组中添加“groupt.groupName”即可。 So the code will become like this 所以代码将变成这样

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; 
SELECT A.groupUserName,B.groupName
FROM ms_GroupUser A LEFT JOIN ms_Group B
ON A.groupID=B.groupID

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM