如何用SQL实现学生登录更新与借书记录的三类场景整合?
学生登录与借书记录整合SQL实现方案
基础匹配规则
- 两张表的联合主键:
doc_part1、doc_part2、doc_part3 - 日期关联匹配规则:表1的
date_update_login与表2的borrow_book日期需完全一致
Case 1:仅更新登录未借书的记录
筛选表1中存在登录更新记录,但表2中无同日借书记录的学生数据:
SELECT si.*, '仅更新登录' AS record_type FROM student_info si LEFT JOIN student_borrow sb ON si.doc_part1 = sb.doc_part1 AND si.doc_part2 = sb.doc_part2 AND si.doc_part3 = sb.doc_part3 AND si.date_update_login = sb.borrow_book WHERE sb.doc_part1 IS NULL;
逻辑说明:通过左连接关联两张表,过滤掉表2中匹配到的记录,剩余即为仅登录未借书的条目。
Case 2:更新登录且同日借书的记录
筛选同时存在当日登录更新和借书记录的学生数据,整合两张表的字段:
SELECT si.*, sb.*, '更新登录且同日借书' AS record_type FROM student_info si INNER JOIN student_borrow sb ON si.doc_part1 = sb.doc_part1 AND si.doc_part2 = sb.doc_part2 AND si.doc_part3 = sb.doc_part3 AND si.date_update_login = sb.borrow_book;
逻辑说明:使用内连接仅保留两张表中主键和日期都完全匹配的记录,此类记录同时满足两个操作。
Case 3:仅借书未更新登录的记录
筛选表2中存在借书记录,但表1中无同日登录更新记录的学生数据:
SELECT sb.*, '仅借书未更新登录' AS record_type FROM student_borrow sb LEFT JOIN student_info si ON sb.doc_part1 = si.doc_part1 AND sb.doc_part2 = si.doc_part2 AND sb.doc_part3 = si.doc_part3 AND sb.borrow_book = si.date_update_login WHERE si.doc_part1 IS NULL;
逻辑说明:以借书记录表为主体左连接登录信息表,过滤掉表1中匹配到的记录,剩余即为仅借书未登录的条目。
内容的提问来源于stack exchange,提问作者Felipe
相关产品推荐
相关产品推荐

