-- 为学生扩展表补充监护人手机号集合,并兼容已经存在学生、用户关系的历史环境。 -- guardian_phones 保存当前未逻辑删除的 GUARDIAN_WARD 关系中全部监护人手机号,按关系创建顺序去重并使用英文逗号分隔。 SET @guardian_phones_column_exists = ( SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'sys_user_student' AND column_name = 'guardian_phones' ); SET @guardian_phones_ddl = IF( @guardian_phones_column_exists = 0, 'ALTER TABLE `sys_user_student` ADD COLUMN `guardian_phones` text DEFAULT NULL COMMENT ''监护人手机号集合,按监护关系创建顺序去重并使用英文逗号分隔'' AFTER `class_name`', 'SELECT ''sys_user_student.guardian_phones already exists''' ); PREPARE guardian_phones_statement FROM @guardian_phones_ddl; EXECUTE guardian_phones_statement; DEALLOCATE PREPARE guardian_phones_statement; SET @previous_group_concat_max_len = @@SESSION.group_concat_max_len; SET SESSION group_concat_max_len = 65535; UPDATE `sys_user_student` AS student LEFT JOIN ( SELECT relation.tenant_id, relation.object_user_id AS student_user_id, GROUP_CONCAT(DISTINCT TRIM(guardian.phone) ORDER BY relation.relation_id SEPARATOR ',') AS guardian_phones FROM `sys_user_relation` AS relation INNER JOIN `sys_user_relation_type` AS relation_type ON relation_type.relation_type_id = relation.relation_type_id AND relation_type.tenant_id = relation.tenant_id AND COALESCE(relation_type.del_flag, '0') = '0' AND relation_type.relation_code = 'GUARDIAN_WARD' INNER JOIN `sys_user` AS guardian ON guardian.user_id = relation.subject_user_id AND guardian.tenant_id = relation.tenant_id AND COALESCE(guardian.del_flag, '0') = '0' AND guardian.phone IS NOT NULL AND TRIM(guardian.phone) <> '' WHERE COALESCE(relation.del_flag, '0') = '0' GROUP BY relation.tenant_id, relation.object_user_id ) AS guardian_relation ON guardian_relation.student_user_id = student.user_id AND guardian_relation.tenant_id = student.tenant_id SET student.guardian_phones = guardian_relation.guardian_phones; SET SESSION group_concat_max_len = @previous_group_concat_max_len;