SQL如何按不同列值条件更新finalRole字段值
SQL更新finalRole字段实现方案
需求说明
现有数据表需更新finalRole字段,更新规则如下:
- 若行数据的
SuperAdminRole字段有值,finalRole赋值为SuperAdminRole的字段值 - 若行数据的
SuperAdminRole字段无值,finalRole赋值为groupRole字段的对应值
涉及字段的示例表数据参考:
Groupid OwnerGid SuperAdminGroupId groupRole ownerRole SuperAdminRole FInalRole ----- ---------- ---------------- --------- --------- -------------- --------- 17 20 3 Admin User SAdmin Sadmin 2 null null Admin Admin
正确SQL写法
场景1:无值仅指NULL值
如果业务中SuperAdminRole的「无值」仅代表字段为NULL,使用COALESCE函数即可,该写法兼容MySQL、PostgreSQL、SQL Server等绝大多数主流数据库:
-- 请将`your_table`替换为你实际的表名 UPDATE your_table SET finalRole = COALESCE(SuperAdminRole, groupRole);
场景2:无值包含NULL和空字符串
如果业务中SuperAdminRole的「无值」包含NULL、空字符串''、纯空格内容,使用CASE WHEN做判断,兼容性最好:
-- 请将`your_table`替换为你实际的表名 UPDATE your_table SET finalRole = CASE WHEN SuperAdminRole IS NOT NULL AND TRIM(SuperAdminRole) <> '' THEN SuperAdminRole ELSE groupRole END;
针对给出的示例数据,执行上述SQL后更新结果完全符合预期:
- Groupid为17的行:
SuperAdminRole值为SAdmin,finalRole更新为SAdmin - Groupid为2的行:
SuperAdminRole无有效值,finalRole更新为Admin
内容的提问来源于stack exchange,提问作者sandeep.mishra
相关产品推荐
相关产品推荐

