Files
autoAiWorkSys/_sql/migrate_device_status_data.sql
张成 4443d43ec1 1
2025-12-15 22:03:01 +08:00

97 lines
3.3 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- Active: 1763990602551@@192.144.167.231@3306@autoaiworksys
-- ============================================
-- 数据迁移脚本:将 device_status 表中的 device_id 迁移到 pla_account 表
-- 执行时间2025-01-XX
-- 说明:根据 sn_code 匹配,将 device_status.device_id 更新到 pla_account.device_id
-- ============================================
-- ============================================
-- 1. 查看 device_status 表中的数据(用于确认)
-- ============================================
SELECT
sn_code,
device_id,
deviceName,
isOnline,
isLoggedIn,
lastHeartbeatTime
FROM device_status
ORDER BY sn_code;
-- ============================================
-- 2. 查看迁移前的 pla_account 数据(用于确认)
-- ============================================
SELECT
id,
sn_code,
device_id,
name,
login_name,
platform_type
FROM pla_account
ORDER BY sn_code;
-- ============================================
-- 3. 执行数据迁移:将 device_status.device_id 更新到 pla_account.device_id
-- ============================================
-- 根据 sn_code 匹配,更新 pla_account 表的 device_id 字段
UPDATE pla_account pa
INNER JOIN device_status ds ON pa.sn_code = ds.sn_code
SET pa.device_id = ds.device_id
WHERE ds.device_id IS NOT NULL
AND ds.device_id != ''
AND (pa.device_id IS NULL OR pa.device_id = '');
-- ============================================
-- 4. 查看迁移后的结果(用于验证)
-- ============================================
SELECT
pa.id,
pa.sn_code,
pa.device_id,
pa.name,
pa.login_name,
pa.platform_type,
CASE
WHEN pa.device_id IS NOT NULL AND pa.device_id != '' THEN '已迁移'
ELSE '未迁移'
END AS migration_status
FROM pla_account pa
WHERE pa.sn_code IN (SELECT sn_code FROM device_status)
ORDER BY pa.sn_code;
-- ============================================
-- 5. 统计迁移结果
-- ============================================
SELECT
COUNT(*) AS total_device_status_records,
SUM(CASE WHEN device_id IS NOT NULL AND device_id != '' THEN 1 ELSE 0 END) AS records_with_device_id
FROM device_status;
SELECT
COUNT(*) AS total_pla_account_records,
SUM(CASE WHEN device_id IS NOT NULL AND device_id != '' THEN 1 ELSE 0 END) AS records_with_device_id_after_migration
FROM pla_account
WHERE sn_code IN (SELECT sn_code FROM device_status);
-- ============================================
-- 注意事项
-- ============================================
-- 1. 此脚本会根据 sn_code 匹配 device_status 和 pla_account 表
-- 2. 只会更新 device_id 为空或 NULL 的 pla_account 记录
-- 3. 如果 pla_account 中已有 device_id不会覆盖如需强制覆盖请修改 WHERE 条件)
-- 4. 执行前建议先查看两个表的数据,确认匹配关系
-- 5. 如果 device_status 表中没有对应的 sn_code该 pla_account 记录的 device_id 将保持为空
-- ============================================
-- 可选:如果需要强制覆盖已有的 device_id谨慎操作
-- ============================================
-- 取消下面的注释,可以强制覆盖 pla_account 中已有的 device_id
/*
UPDATE pla_account pa
INNER JOIN device_status ds ON pa.sn_code = ds.sn_code
SET pa.device_id = ds.device_id
WHERE ds.device_id IS NOT NULL AND ds.device_id != '';
*/