Files
ccdi/sql/migration/2026-04-20-migrate-intermediary-related-num-id-to-person-id.sql

74 lines
2.5 KiB
MySQL
Raw Normal View History

2026-04-20 15:17:31 +08:00
SET NAMES utf8mb4;
SET CHARACTER SET utf8mb4;
SET character_set_client = utf8mb4;
SET character_set_connection = utf8mb4;
SET character_set_results = utf8mb4;
-- 迁移前检查 1找不到对应本人 biz_id 的亲属记录
SELECT
child.biz_id AS child_biz_id,
child.name AS child_name,
child.person_id AS child_person_id,
child.related_num_id AS legacy_owner_biz_id
FROM ccdi_biz_intermediary child
LEFT JOIN ccdi_biz_intermediary parent
ON child.related_num_id = parent.biz_id
AND parent.person_sub_type = '本人'
WHERE child.person_sub_type <> '本人'
AND (child.related_num_id IS NULL OR parent.biz_id IS NULL);
-- 迁移前检查 2本人 person_id 为空的记录
SELECT
child.biz_id AS child_biz_id,
child.name AS child_name,
child.person_id AS child_person_id,
child.related_num_id AS legacy_owner_biz_id,
parent.biz_id AS parent_biz_id,
parent.name AS parent_name,
parent.person_id AS parent_person_id
FROM ccdi_biz_intermediary child
JOIN ccdi_biz_intermediary parent
ON child.related_num_id = parent.biz_id
AND parent.person_sub_type = '本人'
WHERE child.person_sub_type <> '本人'
AND (parent.person_id IS NULL OR TRIM(parent.person_id) = '');
-- 迁移前检查 3迁移后同一中介本人下 related_num_id + person_id 冲突的记录
SELECT
parent.person_id AS owner_person_id,
child.person_id AS relative_person_id,
COUNT(*) AS conflict_count,
GROUP_CONCAT(child.biz_id ORDER BY child.biz_id SEPARATOR ',') AS child_biz_ids
FROM ccdi_biz_intermediary child
JOIN ccdi_biz_intermediary parent
ON child.related_num_id = parent.biz_id
AND parent.person_sub_type = '本人'
WHERE child.person_sub_type <> '本人'
AND parent.person_id IS NOT NULL
AND TRIM(parent.person_id) <> ''
GROUP BY parent.person_id, child.person_id
HAVING COUNT(*) > 1;
START TRANSACTION;
UPDATE ccdi_biz_intermediary child
JOIN ccdi_biz_intermediary parent
ON child.related_num_id = parent.biz_id
SET child.related_num_id = parent.person_id
WHERE child.person_sub_type <> '本人';
COMMIT;
-- 迁移后检查:亲属记录应统一按本人证件号码关联
SELECT
child.biz_id AS child_biz_id,
child.related_num_id AS owner_person_id,
parent.biz_id AS parent_biz_id,
parent.person_id AS parent_person_id
FROM ccdi_biz_intermediary child
LEFT JOIN ccdi_biz_intermediary parent
ON child.related_num_id = parent.person_id
AND parent.person_sub_type = '本人'
WHERE child.person_sub_type <> '本人'
AND (child.related_num_id IS NULL OR parent.biz_id IS NULL);