如何修改SQL Update语句批量填充单列的多国家值?
解决方案
场景1:随机给NULL的County列分配指定国家
如果需要将所有County为NULL的行,随机填充肯尼亚、乌干达、喀麦隆、加纳这些国家,不同数据库的实现语句如下:
MySQL/MariaDB
UPDATE Madanga SET County = ELT(FLOOR(RAND() * 4) + 1, '肯尼亚', '乌干达', '喀麦隆', '加纳') WHERE County IS NULL;
RAND()生成0-1的随机数,乘以4后取整加1,得到1-4的整数索引ELT()根据索引返回对应位置的国家值
PostgreSQL
UPDATE Madanga SET County = (ARRAY['肯尼亚', '乌干达', '喀麦隆', '加纳'])[FLOOR(random() * 4) + 1] WHERE County IS NULL;
- 用数组存储目标国家,通过随机数生成的索引取出对应值
SQL Server
WITH RandomCountries AS ( SELECT ID, (SELECT TOP 1 Country FROM (VALUES ('肯尼亚'),('乌干达'),('喀麦隆'),('加纳')) AS C(Country) ORDER BY NEWID()) AS RandomCountry FROM Madanga WHERE County IS NULL ) UPDATE Madanga SET County = rc.RandomCountry FROM Madanga m JOIN RandomCountries rc ON m.ID = rc.ID;
- 通过CTE为每个NULL行生成随机国家,再关联完成更新
场景2:按规则对应指定国家
如果需要特定ID或条件匹配特定国家(比如ID=2设为肯尼亚,ID=3设为乌干达),可以用CASE语句精准控制:
UPDATE Madanga SET County = CASE WHEN ID = 1 THEN '坦桑尼亚' WHEN ID = 2 THEN '肯尼亚' WHEN ID = 3 THEN '乌干达' WHEN ID = 4 THEN '喀麦隆' WHEN ID = 5 THEN '加纳' END WHERE County IS NULL OR ID IN (1,2,3,4,5);
CASE语句根据匹配条件返回对应国家,可灵活扩展规则
注意事项
- 执行更新前建议先用
SELECT验证结果:把UPDATE替换为SELECT County, 要设置的表达式 FROM Madanga WHERE 条件,避免误改数据 WHERE County IS NULL会确保只修改空值,不会覆盖已有非NULL的County值
内容的提问来源于stack exchange,提问作者Thomas Magono
相关产品推荐
相关产品推荐

