173 lines
4.2 KiB
SQL
173 lines
4.2 KiB
SQL
-- ========================================
|
||
-- 清理孤儿数据 - 立即执行
|
||
-- ========================================
|
||
-- 问题:4194条班级关联记录的学生已被删除
|
||
-- 影响:课程分配学生数 ≠ 用户管理学生数
|
||
-- 解决:删除所有孤儿数据
|
||
-- ========================================
|
||
|
||
-- 第1步:查看要删除的数据(确认)
|
||
SELECT
|
||
'孤儿班级关联' AS type,
|
||
COUNT(*) AS count
|
||
FROM student_class sc
|
||
LEFT JOIN sys_user u ON sc.student_id = u.user_id
|
||
WHERE u.user_id IS NULL
|
||
|
||
UNION ALL
|
||
|
||
SELECT
|
||
'孤儿课程分配' AS type,
|
||
COUNT(*) AS count
|
||
FROM course_assignment ca
|
||
LEFT JOIN sys_user u ON ca.student_id = u.user_id
|
||
WHERE u.user_id IS NULL
|
||
|
||
UNION ALL
|
||
|
||
SELECT
|
||
'孤儿学习记录' AS type,
|
||
COUNT(*) AS count
|
||
FROM learning_record lr
|
||
LEFT JOIN sys_user u ON lr.student_id = u.user_id
|
||
WHERE u.user_id IS NULL;
|
||
|
||
-- ========================================
|
||
-- 第2步:执行清理(按依赖顺序)
|
||
-- ========================================
|
||
|
||
-- 2.1 删除孤儿学习记录详情
|
||
DELETE FROM learning_detail
|
||
WHERE student_id IN (
|
||
SELECT student_id FROM (
|
||
SELECT ld.student_id
|
||
FROM learning_detail ld
|
||
LEFT JOIN sys_user u ON ld.student_id = u.user_id
|
||
WHERE u.user_id IS NULL
|
||
) AS orphan_details
|
||
);
|
||
|
||
-- 2.2 删除孤儿学习记录
|
||
DELETE FROM learning_record
|
||
WHERE student_id IN (
|
||
SELECT student_id FROM (
|
||
SELECT lr.student_id
|
||
FROM learning_record lr
|
||
LEFT JOIN sys_user u ON lr.student_id = u.user_id
|
||
WHERE u.user_id IS NULL
|
||
) AS orphan_records
|
||
);
|
||
|
||
-- 2.3 删除孤儿课程分配
|
||
DELETE FROM course_assignment
|
||
WHERE student_id IN (
|
||
SELECT student_id FROM (
|
||
SELECT ca.student_id
|
||
FROM course_assignment ca
|
||
LEFT JOIN sys_user u ON ca.student_id = u.user_id
|
||
WHERE u.user_id IS NULL
|
||
) AS orphan_assignments
|
||
);
|
||
|
||
-- 2.4 删除孤儿学生班级关联(重要!)
|
||
DELETE FROM student_class
|
||
WHERE student_id IN (
|
||
SELECT student_id FROM (
|
||
SELECT sc.student_id
|
||
FROM student_class sc
|
||
LEFT JOIN sys_user u ON sc.student_id = u.user_id
|
||
WHERE u.user_id IS NULL
|
||
) AS orphan_classes
|
||
);
|
||
|
||
-- 2.5 删除孤儿考试记录
|
||
DELETE FROM exam_record
|
||
WHERE student_id IN (
|
||
SELECT student_id FROM (
|
||
SELECT er.student_id
|
||
FROM exam_record er
|
||
LEFT JOIN sys_user u ON er.student_id = u.user_id
|
||
WHERE u.user_id IS NULL
|
||
) AS orphan_exams
|
||
);
|
||
|
||
-- 2.6 删除孤儿答题记录
|
||
DELETE FROM student_answer
|
||
WHERE student_id IN (
|
||
SELECT student_id FROM (
|
||
SELECT sa.student_id
|
||
FROM student_answer sa
|
||
LEFT JOIN sys_user u ON sa.student_id = u.user_id
|
||
WHERE u.user_id IS NULL
|
||
) AS orphan_answers
|
||
);
|
||
|
||
-- 2.7 删除孤儿学生变更记录
|
||
DELETE FROM study_student_change_log
|
||
WHERE student_id IN (
|
||
SELECT student_id FROM (
|
||
SELECT sc.student_id
|
||
FROM study_student_change_log sc
|
||
LEFT JOIN sys_user u ON sc.student_id = u.user_id
|
||
WHERE u.user_id IS NULL
|
||
) AS orphan_changes
|
||
);
|
||
|
||
-- ========================================
|
||
-- 第3步:验证结果
|
||
-- ========================================
|
||
|
||
-- 再次查询孤儿数据(应该全为0)
|
||
SELECT
|
||
'孤儿班级关联' AS type,
|
||
COUNT(*) AS remaining
|
||
FROM student_class sc
|
||
LEFT JOIN sys_user u ON sc.student_id = u.user_id
|
||
WHERE u.user_id IS NULL
|
||
|
||
UNION ALL
|
||
|
||
SELECT
|
||
'孤儿课程分配' AS type,
|
||
COUNT(*) AS remaining
|
||
FROM course_assignment ca
|
||
LEFT JOIN sys_user u ON ca.student_id = u.user_id
|
||
WHERE u.user_id IS NULL
|
||
|
||
UNION ALL
|
||
|
||
SELECT
|
||
'孤儿学习记录' AS type,
|
||
COUNT(*) AS remaining
|
||
FROM learning_record lr
|
||
LEFT JOIN sys_user u ON lr.student_id = u.user_id
|
||
WHERE u.user_id IS NULL;
|
||
|
||
-- 应该全部显示 0
|
||
|
||
-- ========================================
|
||
-- 第4步:统计清理结果
|
||
-- ========================================
|
||
|
||
SELECT
|
||
'用户表学生数' AS type,
|
||
COUNT(*) AS count
|
||
FROM sys_user
|
||
WHERE user_type IN ('00', '01', '02', 'student')
|
||
|
||
UNION ALL
|
||
|
||
SELECT
|
||
'班级学生数' AS type,
|
||
COUNT(DISTINCT student_id) AS count
|
||
FROM student_class
|
||
|
||
UNION ALL
|
||
|
||
SELECT
|
||
'课程分配学生数' AS type,
|
||
COUNT(DISTINCT student_id) AS count
|
||
FROM course_assignment;
|
||
|
||
-- 三个数字应该一致或接近
|