如何用SQL从关联表填充hotel_consent_language_code的hotel_uid列?
填充hotel_uid列及数据验证方案
一、填充hotel_uid列的SQL语句
使用UPDATE结合表关联,将hotel_consent表中的对应hotel_uid批量更新到hotel_consent_language_code表:
UPDATE hotel_consent_language_code lc SET hotel_uid = hc.hotel_uid FROM hotel_consent hc WHERE lc.hotel_consent_key = hc.key;
该语句通过hotel_consent_key与key列的匹配关系,完成数据的对应填充。
二、确保数据无匹配错误的验证步骤
为避免填充后出现数据缺失或不一致问题,需在执行更新前后完成以下检查:
1. 检查目标表中无匹配的行
执行以下查询,确认hotel_consent_language_code中所有hotel_consent_key都能在hotel_consent中找到对应记录:
SELECT lc.hotel_consent_key FROM hotel_consent_language_code lc LEFT JOIN hotel_consent hc ON lc.hotel_consent_key = hc.key WHERE hc.key IS NULL;
若返回结果,说明这些hotel_consent_key在hotel_consent中无对应数据,需先补充数据或清理无效行,否则更新后会违反hotel_uid的非空约束。
2. 检查关联表的键值唯一性
执行以下查询,确认hotel_consent中同一个key仅对应唯一的hotel_uid:
SELECT key, COUNT(DISTINCT hotel_uid) AS uid_count FROM hotel_consent GROUP BY key HAVING COUNT(DISTINCT hotel_uid) > 1;
若返回结果,说明同一个key关联了多个不同的hotel_uid,需先清理数据保证键值对应关系唯一,否则更新后会导致同一hotel_consent_key对应不同hotel_uid,影响后续复合主键的创建。
3. 更新后验证
执行更新语句后,再次检查所有行的hotel_uid是否已填充:
SELECT * FROM hotel_consent_language_code WHERE hotel_uid IS NULL;
若无返回结果,说明所有行已成功填充hotel_uid,可继续创建三列的复合主键。
内容的提问来源于stack exchange,提问作者Vishwa Bhat
相关产品推荐
相关产品推荐

