提问者:小点点

查询以获取同一列的不同值的一行结果


我是一个全新的SQL和情况如下。 我用的是Spring Data JPA和MySQL。 我有以下4张表

project
+----+-------+---------+
| id | title | status  |
+----+-------+---------+
|  0 | first | waiting |
+----+-------+---------+

user
+----+----------+
| id | username |
+----+----------+
|  0 | user1    |
|  1 | user2    |
+----+----------+

project_role
+----+--------------+
| id | project_role |
+----+--------------+
|  0 | manager      |
|  1 | creator      |
+----+--------------+

user_project_role_link
+----+------------+-----------------+---------+
| id | project_id | projectroles_id | user_id |
+----+------------+-----------------+---------+
|  0 |          0 |               1 |       1 |
|  1 |          0 |               0 |       0 |
+----+------------+-----------------+---------+

下面的查询很适合我

SELECT p.id 
     , p.title 
     , p.status 
     , uprl.projectRole.roleName roleName
     , uprl.user.username username
  FROM Project p 
  JOIN p.userProjectRoleLink uprl
 WHERE uprl.project = project_id

+----+-------+---------+----------+----------+
| id | title | status  | rolename | username |
+----+-------+---------+----------+----------+
|  0 | first | waiting | creator  | user2    |
|  1 | first | waiting | manager  | user1    |
+----+-------+---------+----------+----------+

但是现在我需要一个只有一行和两个username列的输出,如下所示:

+----+-------+---------+----------+----------+
| id | title | status | username  | username |
+----+-------+---------+----------+----------+
|  0 | first | waiting | user1    | user2    |
+----+-------+---------+----------+----------+

我被这个困住了。 非常感谢你的帮助。


共2个答案

匿名用户

我认为解决方案非常简单,因为您在查询中做得很好,但是由于以下原因,您想要的结果非常困难:

通过使用分组,您可以这样做,但如果数据库中的数据增加并返回两行以上的结果,那么很难在一行中获得完整的结果。 所以,我认为您不需要更改查询。

匿名用户

正如我理解您的问题,您可以重新连接项目表以获得第二个用户名列,想法取自自连接逻辑

SELECT p.id 
 , p.title 
 , p.status 
 , uprl.projectRole.roleName roleName
 , uprl1.user.username username1
 , uprl2.user.username username2
FROM Project p 
LEFT JOIN p.userProjectRoleLink uprl1 ON p.project_id = uprl1.project
LEFT JOIN p.userProjectRoleLink uprl2 ON p.project_id = uprl2.project