diff --git a/services/statistics-service/deploy/mysql/migrations/003_social_profile_setup_view.sql b/services/statistics-service/deploy/mysql/migrations/003_social_profile_setup_view.sql index 36a98d8e..8e8a377e 100644 --- a/services/statistics-service/deploy/mysql/migrations/003_social_profile_setup_view.sql +++ b/services/statistics-service/deploy/mysql/migrations/003_social_profile_setup_view.sql @@ -56,12 +56,14 @@ WHERE event.app_code IN ('lalu', 'huwaa', 'fami') AND event.occurred_at_ms >= @profile_start_from_ms AND event.occurred_at_ms < @profile_start_to_ms ON DUPLICATE KEY UPDATE - user_id = CASE WHEN VALUES(user_id) > 0 THEN VALUES(user_id) ELSE user_id END, - device_id = CASE WHEN VALUES(device_id) <> '' THEN VALUES(device_id) ELSE device_id END, - country_id = CASE WHEN VALUES(country_id) > 0 THEN VALUES(country_id) ELSE country_id END, - region_id = CASE WHEN VALUES(region_id) > 0 THEN VALUES(region_id) ELSE region_id END, - profile_setup_view = GREATEST(profile_setup_view, VALUES(profile_setup_view)), - updated_at_ms = GREATEST(updated_at_ms, VALUES(updated_at_ms)); + -- INSERT ... SELECT 的源表和目标表拥有同名列;目标旧值必须显式限定表名, + -- 否则 MySQL 会把未限定列判定为 ambiguous,并留下只加列、未回灌的半迁移状态。 + user_id = CASE WHEN VALUES(user_id) > 0 THEN VALUES(user_id) ELSE stat_social_user_day.user_id END, + device_id = CASE WHEN VALUES(device_id) <> '' THEN VALUES(device_id) ELSE stat_social_user_day.device_id END, + country_id = CASE WHEN VALUES(country_id) > 0 THEN VALUES(country_id) ELSE stat_social_user_day.country_id END, + region_id = CASE WHEN VALUES(region_id) > 0 THEN VALUES(region_id) ELSE stat_social_user_day.region_id END, + profile_setup_view = GREATEST(stat_social_user_day.profile_setup_view, VALUES(profile_setup_view)), + updated_at_ms = GREATEST(stat_social_user_day.updated_at_ms, VALUES(updated_at_ms)); SELECT ROW_COUNT() AS social_profile_setup_view_backfill_affected_rows;