我有一张桌子,我想将所有ID = 2更新为ID = 1,条件是日期不同,因为Date
列上有一个约束,它应该是唯一的。
我正在使用此代码,但不知道如何在这种约束下进行更新。
update table
set ID = 1
where ID = 2
是否有一种方法可以按这些日期分组,如果count(date)> 1则不更新表?
我希望得到这样的输出:
答案 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;