我有一个表,该表的列的值以撇号开头。我想更新表以从具有该值的值的开头删除撇号,除非这样做会创建重复的值。举例:如果我的行与'456,而一行与456,我不想删除撇号。到目前为止,我已经知道了:
UPDATE part
SET partnum = stuff(partnum, 1, 1, '')
WHERE left(partnum, 1) = ''''
如何确保不创建重复项?此列中的值的长度不同。
答案 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