juin
01
Comment effectuer un update à partir du même champs d'une autre ligne dans la même table en SQL Server ?
Pour mettre à jour un champs existant depuis un autre champs de la même table mais qui ne est identifié par une autre clef, une simple requête du type UPDATE MaTable SET MonChamps1 = 'Valeur' WHERE MonChampsClef = 'Ma clef' ne suffit pas. C'est à dire que pour mettre à jour le champs en SQL, il faut identifier le tuple contenant l'autre valeur et récupérer la valeur. Cet article montre comment mettre à jour un champs à partir de la valeur contenue dans une autre ligne, cette ligne étant identifiée par une clef composée.
Pour récupérer la valeur du champs nous pouvons utiliser une requête de ce type (testée sous SQL Server 2008) :
UPDATE MaTable
SET MonChamps = M2.MonChamps
FROM MaTable , MaTable M2
WHERE MaTable.MonChampsClef = 'Une Clef'
AND M2.MonChampsClef = 'Une autre Clef'
AND MaTable.MonChampsDeJointure1 = M2.MonChampsDeJointure1
AND MaTable.MonChampsDeJointure2 = M2.MonChampsDeJointure2
Ainsi les alias de table ne sont pas acceptés dans la première déclaration de la table juste après le UPDATE ni dans la déclaration de la première table de la liste dans la clause FROM de la requête SQL Server.
Par contre les champs de la table sont accessibles en utilisant le nom complet MaTable.MonChampsClef et les alias pour les tables sont possibles dans la clause FROM à la manière d'une requête SELECT classique.
Requête UPDATE, SQL, Update Complexe
UPDATE MaTable
SET MonChamps = M2.MonChamps
FROM MaTable , MaTable M2
WHERE MaTable.MonChampsClef = 'Une Clef'
AND M2.MonChampsClef = 'Une autre Clef'
AND MaTable.MonChampsDeJointure1 = M2.MonChampsDeJointure1
AND MaTable.MonChampsDeJointure2 = M2.MonChampsDeJointure2
Ainsi les alias de table ne sont pas acceptés dans la première déclaration de la table juste après le UPDATE ni dans la déclaration de la première table de la liste dans la clause FROM de la requête SQL Server.
Par contre les champs de la table sont accessibles en utilisant le nom complet MaTable.MonChampsClef et les alias pour les tables sont possibles dans la clause FROM à la manière d'une requête SELECT classique.
Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire