mysql - 如何根据结果值设置具有不同操作的 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 但无法真正弄清楚如何进行。非常感谢您的帮助!
解决方案
如果您将您的更改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
推荐阅读
- c# - 在 C# 中正确使用 VB 的 GetObject
- sabre - API 令牌:如何访问 Sabre SOAP API?
- .net-core - 使用 Projections 不会加载使用数据加载器解析的字段
- xamarin.forms - Xamarin 表单 PropertyChanged 对象为空
- r - 错误:“命名空间:ff”未导出对象“克隆”
- spring - 如何从 com.ibm.mq.MQException 中恢复:MQJE001:完成代码“2”,原因“2009”
- python - Python:要求用户输入数字,选择1则打印文本,否则退出程序
- php - WordPress 和 WPBakery 更新后无法加载更多帖子项目
- r - 在 R 中解析 XML-TEI 并转换为语料库
- java - 如何在 Java 中找到质数?