Bon moyen d'utiliser l'alias de table dans l'instruction Update?

95

J'utilise SQL Server et j'essaie de mettre à jour les lignes à partir de la même table. Je souhaite utiliser un alias de table pour plus de lisibilité.

Voici comment je le fais en ce moment:

UPDATE ra
SET ra.ItemValue = rb.ItemValue
FROM dbo.Rates ra
INNER JOIN  dbo.Rates rb
ON ra.ResourceID = rb.ResourceID
WHERE ra.PriceSched = 't8'
AND rb.PriceSched = 't9'

Existe-t-il des moyens plus faciles / meilleurs?

realcals
la source
1
J'aime utiliser le mot-clé optionnel "AS" (FROM dbo.Rates AS ra) pour la lisibilité.
Robert S.
3
J'utiliserais la bonne syntaxe ANSI JOIN FROM dbo.Rates ra INNER JOIN dbo.Rates rb ON ra.ResourceID = rb.ResourceID- c'est la norme, c'est plus clair et cela évite tout produit cartésien indésirable en oubliant la ou les conditions JOIN dans votre clause WHERE ....
marc_s
1
marc_s a un bon point; J'ai modifié le SQL pour utiliser une syntaxe JOIN plus claire
realcals

Réponses:

46
UPDATE ra 
   SET ra.ItemValue = rb.ItemValue
  FROM dbo.Rates ra
 INNER JOIN dbo.Rates rb
         ON ra.ResourceID = rb.ResourceID
WHERE ra.PriceSched = 't8'
  AND rb.PriceSched = 't9';

Cela peut aider à améliorer les performances.

Alexandre
la source
2
Pourquoi?? Vous n'avez rien changé sauf les cosmétiques!
underscore_d
1

Alias ​​de table dans la requête de mise à jour dans T-SQL (Microsoft SQL). pour MS SQL Server 2008 R2, cela fonctionne très bien

UPDATE A_GeneralLedger  set ScheduleId=g.ScheduleId
from A_GeneralLedger l inner join A_AcGroup g on g.ACGroupID=l.AccountGroupID
Subhas Malik
la source