如何使用唯一键约束更新SQL Server表ID?

时间:2018-10-23 22:15:08

标签: sql sql-server

我有一张桌子,我想将所有ID = 2更新为ID = 1,条件是日期不同,因为Date列上有一个约束,它应该是唯一的。

enter image description here

我正在使用此代码,但不知道如何在这种约束下进行更新。

update table
set ID = 1
where ID = 2

是否有一种方法可以按这些日期分组,如果count(date)> 1则不更新表?

我希望得到这样的输出:

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以添加NOT EXISTS条件以从更新中排除日期为ID = 1的行。

update T1
set T1.ID = 1
From MyTable T1
where T1.ID = 2
AND Not Exists (Select 1 from MyTable T2 Where T2.Id = 1 and T2.Date = T1.Date)

答案 1 :(得分:1)

如何使用联接

CREATE TABLE T
(
  ID INT,
  [Date] DATE,
  Amt INT
);

INSERT INTO T VALUES
(1, '2018-07-17', 450),
(1, '2018-07-18', 500),
(1, '2018-07-19', 600),
(2, '2018-07-17', 850),
(2, '2018-07-18', 950),
(2, '2018-07-19', 900),
(2, '2018-07-20', 380),
(2, '2018-07-21', 920);

UPDATE T1
SET T1.ID = 1
FROM T T1 INNER JOIN
          (
            SELECT MAX(ID) ID, [Date]
            FROM T
            GROUP BY [Date]
            HAVING COUNT([Date]) = 1
          ) T2 ON T1.[Date] = T2.[Date]
WHERE T1.ID = 2;

SELECT *
FROM T;