同一个表上的SQL更新和防止重复

时间:2013-04-12 17:04:45

标签: sql

我正在尝试更新可能有重复项的表上的值,我想避免这些重复项以避免错误:

表格

TicketID : UserID
  0      :   1
  0      :   5
  0      :   6
  1      :   4
  1      :   5

我要做的是将所有Ticket Id的that = 0,更新为1的值。正如您所看到的,1 : 5的值已经导致冲突。我已经使用merge, insert into尝试where,但我无法获得忽略可能存在的更新行的查询。

更新后,我会手动删除剩余的0 : 5,因为那不会更新,我认为合并可以为我做,但我无法让它工作

2 个答案:

答案 0 :(得分:0)

首先检查重复项并删除它们 - 然后执行ubdate。

BEGIN TRAN

DELETE FROM Table
WHERE TicketID = 0 AND UserID IN(SELECT UserID FROM TABLE WHERE TicketID=1);

UPDATE TABLE
SET TicketID = 1
WHERE TicketID = 0;

/*If no error run*/
COMMIT TRAN
/*If error run*/
ROLLBACK TRAN

答案 1 :(得分:0)

尝试如下。它会帮助你..

UPDATE TABLENAME
SET TicketID = 1
WHERE TicketID = 0 AND UserID Not IN(SELECT distinct UserID FROM TABLENAME 
WHERE TicketID=1)

DELETE FROM TABLENAME WHERE TicketID = 0