Pravděpodobně máte v datech duplikáty. DISTINCT
nezaručuje, že máte IdToUpdate
jedinečný, když jej použijete s jinými sloupci. Viz:
CREATE TABLE #MyTable(IdToUpdate INT, LogSetIdToUpdateTo INT);INSERT INTO #MyTable VALUES (1,1), (1,2), (2,1),(3,1);SELECT DISTINCT IdToUpdate , LogSetIdToUpdateToFROM #MyTable;
Získáte IdToUpdate
dvakrát. Zkontrolujte svá data:
s cte as (Select odlišný nulllogsetid.id jako idToupDate, známý, logsetIdToupDateto z mytable známého známého a známého nulllogsetId na známémLogSetid. DEF' a známéLogSetId.LogSetId>=0 a nullLogSetId.LogSetId =-1)SELECT IdToUpdate, COUNT(*) AS cFROM cteGROUP BY IdToUpdateHAVING COUNT(*)> 1;
Jedním ze způsobů je použít funkci agregace(MAX/MIN)
místo DISTINCT
:
Sloučte se do mytableusing (vyberte nulllogsetId.id jako idToupdate, max (známýLogSetid.LogSetId) jako logSetIdToupDateto z mytable známého napisovateidIfirTeTeTeTeTeTeTeTeTeTeTeTeTetid.Identifier.Identifier.Identifier.Identifier.Identifier.Identifier.Identifier.Identifier.Identifier. IdentifierType ='DEF' a známéLogSetId.LogSetId>=0 a nullLogSetId.LogSetId =-1 GROUP BY nullLogSetId.Id) v (Id =IdToUpdate) při shodě pakupdate set LogSetId =LogSetI