如何在PostgreSQL中仅更新为NULL的指定字段?
PostgreSQL 仅更新NULL字段的解决方案
你可以用PostgreSQL的COALESCE函数实现需求——它会返回传入参数里第一个非NULL的值。修改后的UPDATE语句如下:
UPDATE public.people SET flag = COALESCE(flag, $flag), name = COALESCE(name, $name), surname = COALESCE(surname, $surname) WHERE id_dt = $id_dt;
原理说明:
COALESCE(flag, $flag):如果当前行的flag字段不为NULL,就保留原有值;只有当flag是NULL时,才用$flag的新值更新。name和surname字段遵循同样逻辑,不会覆盖已有的非NULL数据。
如果你的参数$flag、$name本身可能为NULL(且这种情况下你不想写入NULL),可以用CASE语句实现更严谨的判断:
UPDATE public.people SET flag = CASE WHEN flag IS NULL THEN $flag ELSE flag END, name = CASE WHEN name IS NULL THEN $name ELSE name END, surname = CASE WHEN surname IS NULL THEN $surname ELSE surname END WHERE id_dt = $id_dt;
两种方法都能达成“仅更新NULL字段、不覆盖已有数据”的效果,COALESCE写法更简洁,优先推荐。
内容的提问来源于stack exchange,提问作者morphineglelly
相关产品推荐
相关产品推荐

