SQL Avec mise à Jour...
Est-il possible de faire une sorte de "WITH...UPDATE
" action sur SQL?
Par exemple:
WITH changes AS
(...)
UPDATE table
SET id = changes.target
FROM table INNER JOIN changes ON table.id = changes.base
WHERE table.id = changes.base;
Certaines informations de contexte: Ce que j'essaie de faire est de générer un base
/target
liste à partir d'un tableau et ensuite l'utiliser pour modifier les valeurs dans une autre table (modification des valeurs égales à base
en target
)
Merci!
alors, pourquoi n'utilisez-vous pas la avec de la requête elle-même dans la commande de mise à jour?
Vous ne pouvez pas utiliser
Pourriez-vous nous donner un exemple pour vérifier si c'est ce que je suis à la recherche?
remplacer exactement le avec la commande select ( . . . ) avec des changements (après jointure interne) dans la commande de mise à jour, et méfiez-vous des propos d'un alias
Pas vraiment, comme je suis en train d'expérimenter ce que je suis en train de faire. Ce que j'essaie de faire est de modifier chaque ligne
Vous ne pouvez pas utiliser
with
dans un update
, c'est uniquement valide pour les select
. Vous pouvez utiliser merge
, mais pas si vous êtes vraiment à la rejoindre et de la mise à jour de la même valeur, id
dans ce cas; sont votre jointure et où l'une des clauses les deux vraiment se référant à changes.base
?Pourriez-vous nous donner un exemple pour vérifier si c'est ce que je suis à la recherche?
remplacer exactement le avec la commande select ( . . . ) avec des changements (après jointure interne) dans la commande de mise à jour, et méfiez-vous des propos d'un alias
Pas vraiment, comme je suis en train d'expérimenter ce que je suis en train de faire. Ce que j'essaie de faire est de modifier chaque ligne
id
champ de base
à target
(chaque base
correspondant à son target
; lignes avec d'autres id
valeurs ne sont pas affectés).
OriginalL'auteur Racso | 2013-06-25
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
merge
, avec l'équivalent de votrewith
clause de lausing
clause, mais parce que vous êtes à la mise à jour de la rubrique que vous rejoindre sur ce que vous devez faire un peu plus de travail; ce:.. donne l'erreur:
Bien sûr, ça dépend un peu de ce que vous êtes en train de faire dans le CTE, mais aussi longtemps que vous pouvez joindre à votre table withint que, pour obtenir la
rowid
vous pouvez les utiliser pour l'on
clause de la place:Si je créer mon
t42
table avec uneid
de colonnes et de rangées avec les valeurs 1, 2 et 3, ce sera la mise à jour de la première de deux à 10 et 20, et de laisser le troisième un seul.SQL Violon démo.
Il n'a pas à être
rowid
, il peut être un véritable colonne si elle identifie de manière unique la ligne; normalement, ce serait unid
, qui aurait normalement jamais changer (comme une clé primaire), vous ne pouvez pas l'utiliser et de le mettre à jour à la même heure.OriginalL'auteur Alex Poole