这是我正在处理的情况:
我有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数据库。
答案 0 :(得分:1)
您可以使用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 = ?
)
答案 1 :(得分:0)
我认为工会可以做到。像这样
select * from
(
select u.*, assignment_id, 'assignment_submissions' as type from users u
inner join assignment_submissions ass on u.id= ass.student_id
union
select u.*, assignment_id, 'group_submissions' from users u
inner join group_submissions gs on u.id = gs.student_id
inner join assignments a on a.id = ass.assignment_id
)a
where assignment_id = ?