我正在尝试使用联接中的值更新表。但是,运行此命令可以更新0行。当用select替换update语句时,我得到1行联接。
以下只是我在工作中要实现的目标。获取与下一个策略相关的子策略ID $ amount(它们不相关,并且取决于日期。它们通过rgnID链接)并更新临时表。我修改了以下内容只是为了模拟。
create table tTB1 (plcyID int, rgnID int, ncptdt datetime, plctypID int)
insert into tTB1 (plcyID , rgnID , ncptdt , plctypID)
values (1,1,'2017-10-01',1),(2,1,'2018-10-01',2),
(3,1,'2018-10-01',3),(4,1,'2019-10-01',2)
--create table #tTEMP (total int, plcyID int, rgnID int, ncptdt datetime, plctypID int)
--select * from tTB1
;WITH cteLYPolicy
AS
(
select p.rgnID,MXPLCY=MAX(p.plcyID)
FROM tTB1 t
INNER JOIN tTB1 p ON p.rgnID=t.rgnID and p.ncptdt<t.ncptdt and p.plcyID<t.plcyID and p.plctypID in (1,2)
WHERE t.plctypID=2
GROUP BY p.rgnID
)
--UPDATE l
--set l.plctypID = 10--p.plctypID
select *
from cteLYPolicy cte
inner join tTB1 l ON l.plcyID =cte.MXPLCY --ly
inner join tTB1 p ON p.rgnID=l.rgnID and p.ncptdt>l.ncptdt and p.ncptdt = DATEADD(year,1,l.ncptdt)
答案 0 :(得分:1)
如果列的值已经是您要设置的值,则SQL Server和大多数RDMS都会以这种方式运行。
此行为的演示:http://sqlfiddle.com/#!18/8eb54/7
CREATE TABLE [t] (
PRIMARY KEY ([n])
, [n] INT NOT NULL
);
INSERT INTO [t] ([n])
SELECT 1;
-- 0 Rows affected
UPDATE [t]
SET [n] = 1
WHERE 1 = 1;
-- 0 Rows affected
SELECT * FROM [t];
-- 1 Row returned