sql - 使用空值连接两个表 - SQL
问题描述
我有两个表如下。我想在 2/04/2021 日期加入这两个,就像在输出表中一样。如输出所示,有机会获得任何表的空值。
学生详情
Auto_id StudentID StudentName LastAttendedDate
1 AAA RAGHAV 8/25/2020 1:40:35 AM
2 BBB VARUN 2/04/2021 5:40:23 AM
3 AAA RAGHAV 2/04/2021 1:40:25 AM
4 AAA RAGHAV 2/04/2021 3:40:35 AM
5 BBB VARUN 10/01/2021 9:40:35 AM
6 CCC MAYA 2/04/2021 8:40:35 AM
考试详情
Auto_id StudentID exam_name exam_date
1 AAA PRILIMS 2/04/2021 1:40:35 AM
2 BBB MAINS 2/04/2021 5:40:35 AM
3 AAA PRILIMS 2/04/2021 8:40:35 AM
4 GGG PRILIMS 2/04/2021 1:10:35 AM
5 GGG MAINS 2/04/2021 2:10:35 AM
6 GGG MAINS 2/05/2021 2:10:35 AM
输出
StudentID LastAttendedDate exam_name exam_date
BBB 2/04/2021 5:40:23 AM MAINS 2/04/2021 5:40:35 AM
AAA 2/04/2021 1:40:25 AM PRILIMS 2/04/2021 8:40:35 AM
AAA 2/04/2021 3:40:35 AM MAINS 2/04/2021 8:40:35 AM
CCC 2/04/2021 8:40:35 AM NULL NULL
GGG NULL MAINS 2/04/2021 2:10:35 AM
- 应在 2021 年 2 月 4 日的“student_details”表中列出 StudentID 和 LastAttendedDate,
- 如果有的话,学生的 max(exam_date)(日期 2/04/2021) 应该加入行。
- 即使“student_details”上没有数据,它也应该显示学生的 max(exam_date)。
解决方案
我想你想要full join
,但在聚合两个表之后:
select coalesce(sd.studentid, ed.studentid) as studentid,
sd.studentname, sd.lastattendeddate,
ed.exam_name, ed.exam_date
from (select studentid, studentname, max(lastattendeddate) as lastattendeddate
from student_details
group by studentid, studentname
) sd full join
(select studentid, exam_name, max(exam_adte) as exam_date
from exam_details
group by studentid, exam_name
) ed
on sd.studentid = ed.studentid;
推荐阅读
- ruby-on-rails - 耙子任务没有在红宝石中调用工人工作
- python - 绘制干净的 JSON 股票价格数据
- c# - 如何使用表达式将方法调用附加到类似构建器的调用链?
- ruby - 当我尝试使用 React 下载时,Sinatra 使用 `send_file` 发送损坏的 .zip 文件
- javascript - 如何在android webview中顺利拖动和旋转图像
- angular - 无法在 AWS Cognito 用户池应用程序客户端的回调 URL 中使用哈希 (#)
- azure - Azure API 管理 + Azure 函数和托管标识
- mysql - SQLSTATE[HY000] [2002] 使用 whereHas 时 laravel 中的连接被拒绝错误
- git - 合并覆盖我标记为假设没有更改的文件
- javascript - 如何使用 python 从网站用户那里获取网络摄像头提要?