Oui, SQL UPDATE
peut être utilisé avec order by
dans une sous-requête SELECT
.SQL Update avec besoin de commander dans la sous-requête
Tout le monde là-bas qui a une solution de contournement pour problème suivant:
De temps en temps un programme génère des erreurs de données dans TABLE1
(nous ne sommes pas propriétaire de ce code, mais besoin d'utiliser le programme ...)
Nous utilisons un déclencheur qui protocole toutes les modifications apportées à une table AUDIT
.
Nous pouvons trouver la situation d'erreur (et l'ancienne valeur correcte) avec suivante, sélectionnez:
select top 1 audit.OldValue
from TABLE1
left join AUDIT on AUDIT.Table1_ID = TABLE1.ID
where <...some conditions...>
order by AUDIT.UpdateDate desc
Comme il y a plusieurs changements enregistrés, nous avons seulement besoin du dernier changement (order by updatedate
puis prendre TOP 1
)
nous corriger l'erreur de données, si nous pouvions utiliser la commande UPDATE
comme
Update TABLE1
set VALUE =
(select top 1 audit.OldValue
from TABLE1
left join AUDIT on AUDIT.Table1_ID = TABLE1.ID
where <...some conditions...>
order by AUDIT.UpdateDate desc)
where TABLE1.ID = AUDIT.Table1_ID
MAIS: vous ne pouvez pas utiliser le order by
dans une sous-requête ...
Quels sont les dbms que vous utilisez? – jarlh
Copie possible de [Comment mettre à jour la colonne provenant du top 1 de l'autre table] (https://stackoverflow.com/questions/6952277/how-to-update-the-column-coming-from-top-1-of -other-table) – Prisoner
Nous utilisons MS-SQL-Server 2012 –