Обновить таблицу с помощью «Выбрать внутреннее объединение» - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь обновить таблицу значениями из объединения. Тем не менее, выполнение этого дает мне 0 обновленных строк. При замене оператора update на select я получаю объединение в 1 строку.

Ниже я просто пытаюсь достичь на работе. Получите ID $ дочерней политики, который связан со следующей политикой (они не связаны и зависят от дат. Они связаны через 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)

1 Ответ

1 голос
/ 20 октября 2019

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...