我是一个全新的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 |
+----+-------+---------+----------+----------+
我被这个困住了。 非常感谢你的帮助。
我认为解决方案非常简单,因为您在查询中做得很好,但是由于以下原因,您想要的结果非常困难:
通过使用分组,您可以这样做,但如果数据库中的数据增加并返回两行以上的结果,那么很难在一行中获得完整的结果。 所以,我认为您不需要更改查询。
正如我理解您的问题,您可以重新连接项目表以获得第二个用户名列,想法取自自连接逻辑
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