更新列中的值,但何时创建重复项

时间:2019-02-15 22:07:35

标签: sql sql-server

我有一个表,该表的列的值以撇号开头。我想更新表以从具有该值的值的开头删除撇号,除非这样做会创建重复的值。举例:如果我的行与'456,而一行与456,我不想删除撇号。到目前为止,我已经知道了:

UPDATE part 
SET partnum = stuff(partnum, 1, 1, '')
WHERE left(partnum, 1) = ''''

如何确保不创建重复项?此列中的值的长度不同。

2 个答案:

答案 0 :(得分:1)

您可以使用not exists

UPDATE part
    SET partnum = stuff(partnum, 1, 1, '')
    WHERE partnum LIKE '''%' AND
          NOT EXISTS (SELECT 1 FROM part p2 WHERE '''' + p2.partnum = part.partnum);

答案 1 :(得分:0)

尽管Gordon对子查询的回答和NOT EXISTS条件是最直观的解决方案,但是您也可以使用OUTER JOIN检查重复项,从而提高了相关子查询的性能。

UPDATE part 
SET partnum = stuff(part.partnum, 1, 1, '')
FROM part 
     LEFT JOIN part as duplicate on duplicate.partnum = stuff(part.partnum, 1, 1, '') 
WHERE left(part.partnum, 1) = '''' and
      duplicate.partnum is null