PostgreSQL中如何用查询语句更新表中NULL的product_id字段?
正确实现方法
首先纠正你两个核心错误:
INSERT是用来新增数据行的,你要修改已有行的字段值,得用UPDATE语句。- 判断字段为
NULL必须用IS NULL,不能用= NULL——因为在SQL里,NULL和任何值比较的结果都是NULL,永远不会匹配成功。
根据你的需求,分两种场景给出正确SQL:
场景1:表a和表b通过关联字段匹配(比如共享product_name)
如果表a和表b存在对应关系(比如a的product_name和b的product_name一一对应),要把a中product_id为NULL的行,替换成b中同product_name对应的product_id:
UPDATE a SET product_id = b.product_id FROM b WHERE a.product_id IS NULL AND a.product_name = b.product_name;
场景2:将a中所有NULL的product_id替换为b中固定值(product_name='foo'对应的product_id)
如果只是想把a里所有product_id为NULL的行,统一替换成b中product_name='foo'的那一个product_id(注意:要保证b中这个条件仅返回一行,否则会报错):
UPDATE a SET product_id = (SELECT product_id FROM b WHERE product_name='foo') WHERE product_id IS NULL;
如果b中product_name='foo'可能返回多行,需要限制只取一行,比如:
UPDATE a SET product_id = (SELECT product_id FROM b WHERE product_name='foo' LIMIT 1) WHERE product_id IS NULL;
内容的提问来源于stack exchange,提问作者DP.
相关产品推荐
相关产品推荐

