MySQL如何按test_name分组填充同组内空unit字段为非空值
解决方案
可以通过UPDATE关联分组子查询的方式实现该需求,核心逻辑是先按test_name分组取出每组非空的unit值,再关联原表更新空字段即可,你要的UPDATE JOIN写法完全可以实现。
实现说明
我们用聚合函数(MAX/MIN均可)提取每组非空unit,空值在聚合计算时会被自动忽略,刚好满足「取同组任意非空值」的要求。
主流数据库写法示例
MySQL 写法
UPDATE tests t1 INNER JOIN ( SELECT test_name, MAX(unit) AS filled_unit FROM tests WHERE unit IS NOT NULL AND unit != '' GROUP BY test_name ) t2 ON t1.test_name = t2.test_name SET t1.unit = t2.filled_unit WHERE t1.unit IS NULL OR t1.unit = '';
PostgreSQL 写法
UPDATE tests t1 SET unit = t2.filled_unit FROM ( SELECT test_name, MAX(unit) AS filled_unit FROM tests WHERE unit IS NOT NULL AND unit != '' GROUP BY test_name ) t2 WHERE t1.test_name = t2.test_name AND (t1.unit IS NULL OR t1.unit = '');
执行效果验证
针对你给出的示例数据,执行语句后:
- id=2的Current记录空unit会填充为A
- id=5的Voltage记录空unit会填充为V/v(取决于用MAX还是MIN聚合,均符合需求)
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

