Mysql 在这种情况下,如何执行加入策略?
这就是我正在处理的情况: 我有4张桌子: 用户表:Mysql 在这种情况下,如何执行加入策略?,mysql,sql,Mysql,Sql,这就是我正在处理的情况: 我有4张桌子: 用户表: +----+-------+ | id | name | +----+-------+ | 1 | name1 | | 2 | name2 | | 3 | name3 | +----+-------+ 分配表: +----+-----------------+ | id | assignment_name | +----+-----------------+ | 11 | name1 | | 12 | name2
+----+-------+
| 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 |
+----+----------------+---------+
提交表有一个分配id,用于说明提交所属的分配
此外,用户还可以提交组提交,其中进行提交的用户进入提交表,而其他用户进入组提交表。这样,它将被视为一个提交,而不是2,3…N提交的基础上有多少人在小组中
我如何获得在给定作业中提交了提交或参与了组提交的用户
结果应根据分配id返回提交表或组提交表中的一个或多个用户
结果应该如下所示:
+----+-------+
| id | name |
+----+-------+
| 1 | name1 |
| 2 | name2 |
+----+-------+
它基本上应该返回用户表
这就是我迄今为止所尝试的:
这只提供了不在submissions表中但在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
这只给我一个提交的用户(在提交表中)
我的加入策略应该是什么?或者,连接在这里不是正确的选择
注意:这是一个MySQL数据库。我想一个联盟可以做到这一点。像这样
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 = ?
您可以使用
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 = ?
)
请以表格文本的形式向我们展示您期望的结果。是的,就是这样。非常感谢。
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 = ?
)