Mysql 在这种情况下,如何执行加入策略?

Mysql 在这种情况下,如何执行加入策略?,mysql,sql,Mysql,Sql,这就是我正在处理的情况: 我有4张桌子: 用户表: +----+-------+ | id | name | +----+-------+ | 1 | name1 | | 2 | name2 | | 3 | name3 | +----+-------+ 分配表: +----+-----------------+ | id | assignment_name | +----+-----------------+ | 11 | name1 | | 12 | name2

这就是我正在处理的情况:

我有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 |
+----+----------------+---------+
提交表有一个分配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 = ?
    )