这是我正在处理的情况:
我有 4 个表:
用户表:
+----+-------+
| id | name |
+----+-------+
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
+----+-------+
分配表:
+----+-----------------+
| id | assignment_name |
+----+-----------------+
| 11 | name1 |
| 12 | name2 |
| 13 | name3 |
+----+-----------------+
提交:
+----+---------------+---------+
| id | assignment_id | user_id |
+----+---------------+---------+
| 1 | 11 | 3 |
| 2 | 12 | 1 |
| 3 | 11 | 2 |
+----+---------------+---------+
群组提交
+----+----------------+---------+
| id | submission_id | user_id |
+----+----------------+---------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 3 | 1 |
+----+----------------+---------+
提交表有一个 assignment_id 来告诉提交属于哪个分配。
用户也可以提交群组提交,提交的人进入提交表,而其他人进入 group_submissions 表。这样一来,它将被计为一次提交,而不是基于组中有多少人的 2,3...N 次提交。
如何获取已提交提交或已参与给定作业中的组提交的用户?
结果应根据分配 ID 返回提交表或 group_submissions 表中的一个或多个用户
结果应该是这样的:
+----+-------+
| id | name |
+----+-------+
| 1 | name1 |
| 2 | name2 |
+----+-------+
它基本上应该返回用户表。
这是我到目前为止尝试过的:
这只给我不在提交表中但在 group_submission 中的用户
select * from users u
right join group_submissions gs on u.id = gs.student_id
right join assignment_submissions ass on gs.submission_id = ass.id
inner join assignments a on a.id = ass.assignment_id
where a.id = number
这只会给我一个提交的用户(在提交表中)
select * from users u
right join assignment_submissions ass on u.id= ass.student_id
right join group_submissions gs on ass.id = gs.submission_id
inner join assignments a on a.id = ass.assignment_id
where a.id = number
我的加入策略应该是什么?或者在这里加入不是正确的选择。
注意:这是一个 MySQL 数据库。
最佳答案
你可以使用exists
:
select u.*
from users u
where
exists (
select 1
from submissions s
where s.user_id = u.id and s.assignment_id = ?
)
or exists (
select 1
from group_submissions gs
inner join submissions s on s.id = gs.submission_id
where gs.user_id = u.id and s.assignment_id = ?
)
关于mysql - 在这种情况下如何做加入策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60600237/