【发布时间】:2021-12-24 01:50:51
【问题描述】:
我有一个问题,我想修剪前面有零的列。 问题是该表对少数列存在唯一约束,而我要修复的列就是其中之一。 一些数据已被用户操纵,导致这些重复行。 我不想触摸它们并让它们保持原样。 但是当我发出以下命令时,我得到了唯一的约束违规,这是有道理的。但是如何克服它。我知道 INSERT 有一个 ON CONFLICT DO NOTHING 语句,但是 UPDATE 语句有什么类似的。 当我发出以下命令时,我得到以下信息,因为 po_number 400102194 已经由用户从前端插入。
update moa.part set po_number = TRIM(LEADING '0' from po_number) where po_number like '0%'
ERROR: duplicate key value violates unique constraint "part_4col_uni_idx"
DETAIL: Key (part_number, esn_id, po_number, tenant_id)=(642W9874-501, 1709, 400102194, 1) already exists.
SQL state: 23505
所以我想尝试以下类似的方法,但我知道这行不通
update moa.part set po_number = TRIM(LEADING '0' from po_number) where po_number like '0%'
ON CONFLICT ON CONSTRAINT part_4col_uni_idx DO NOTHING;
如何达到同样的效果
样本记录
part_id part_number part_description esn_id quantity status_id material_stream_id source_id oem po_number manual_cso_commit dr_status_id airway_bill core_material active created_at created_by updated_at updated_by tenant_id hpc_status_id module_id auto_cso_commit ship_out receipt crit_ship late_call ex_esn accum_offset po_line_num
5344252 J644P21A BOLT DOUBLE HEXAGON HEAD MACHINE 26 8-Jul 0 1 24 CFM INTERNATIONAL 100159499 NULL NULL NULL TRUE FALSE 2020-04-03 08:20:00.043306+00 NULL 2020-04-03 08:20:00.043306+00 NULL 1 NULL NULL NULL NULL NULL FALSE FALSE NULL 0 NULL
【问题讨论】:
-
这对你有意义吗? dbfiddle.uk/…
-
是的..有道理...会尝试并让您知道...Thnx...part_id 是主键
-
好的,我刚刚添加了一个使用 part_id 作为 pk 的小提琴的答案。
标签: sql postgresql sql-update