首页 > 解决方案 > 如何根据结果值设置具有不同操作的 QUERY?

问题描述

我需要有关如何设置查询的帮助,该查询将根据它在途中实现的结果产生不同的输出,而我完全被卡住了!

我会给你一些更多的细节,首先,这是我当前的数据库设置:

#USERS
id   username etc.. 
1    alex123
2    bonnie9
3    clyde_x

#COURSES
id   course_name   visibility etc..
1    Name 1        1
2    Name 2        0
3    Name 3        1

#COURSE_ENROLMENT
id   user_id   course_id
1    1         1
2    1         2
3    3         1

场景如下..

我需要向注册的用户列出课程,这很容易通过以下方式完成:

SELECT 
* 
FROM COURSES C
JOIN COURSE_ENROLMENT E ON C.ID = E.COURSE_ID

然而。如果课程可见性(数据库:课程,列:可见性)设置为对所有人可见 = 1,那么它将覆盖或忽略注册并向所有用户显示课程。

我怎样才能实现这样的目标?我试图研究 CASE 但无法真正弄清楚如何进行。非常感谢您的帮助!

标签: mysqlsql

解决方案


如果您将您的更改JOIN为 a LEFT JOIN,这将为您提供所有课程,无论是否有人注册。然后,您可以通过检查以下内容过滤掉没有任何人注册且不可见的课程visibility = 1

SELECT *
FROM Courses C
LEFT JOIN Course_Enrolment E ON C.id = E.course_id
WHERE C.visibility = 1 OR E.id IS NOT NULL

输出:

id  course_name visibility  id      user_id course_id
1   Name 1      1           1       1       1
2   Name 2      0           2       1       2
1   Name 1      1           3       3       1
3   Name 3      1           null    null    null

dbfiddle 上的演示


推荐阅读