0
votes

Mettre à jour avec une jointure intérieure sur SQL Server

J'ai 2 tables utilisateurs et commandes . Touche principale de utilisateurs est userid , que j'ai défini comme clé étrangère dans la table commandes . J'ai ajouté une nouvelle colonne de nom d'utilisateur à commandes . Je veux importer Nom d'utilisateur à partir des utilisateurs .

J'essaie d'exécuter ce code, mais cela continue de me donner des erreurs. Quelqu'un peut-il me dire ce qui pourrait être faux? xxx


0 commentaires

5 Réponses :


4
votes

Ce n'est pas la bonne syntaxe xxx

Vous devez commencer à utiliser alias pour les références de tables lorsque vous trouverez plus d'une table impliquée dans votre requête. L'utilisation des noms d'alias rend la requête plus lisible.


0 commentaires

1
votes

Vous êtes des commandes manquantes Nom de la table

UPDATE Orders 
SET Orders.UserName = Users.UserName 
from Orders
INNER JOIN Users ON Orders.UserId = Users.UserId ;


0 commentaires

1
votes

No Mettre à jour avec Joindre interne , veuillez ré-écrire votre requête comme suit:

Vous pouvez utiliser interne rejoindre seulement après < Code> à partir de clause xxx


0 commentaires

0
votes

Votre structure de requête doit être comme ci-dessous: xxx pré>

de sorte que votre requête réelle doit être comme ci-dessous: P>

UPDATE Orders SET Orders.UserName = Users.UserName 
FROM Users WHERE Orders.UserId = Users.UserId


0 commentaires

1
votes

J'aime bien la version CTE de la mise à jour ici, car elle nous permet d'expression de la logique de jointure, car nous le ferions dans un choix, sans aucune confusion potentielle:

WITH cte AS (
    SELECT o.UserName AS user_old, u.UserName AS user_new
    FROM Orders o
    INNER JOIN Users u ON u.UserId = o.UserId
)

UPDATE cte
SET user_old = user_new;


1 commentaires

@wakanada Ma réponse devient utile dans les cas où il est plus facile de simplement écrire un Select. Dans ce cas, la réponse que votre acceptation n'est pas trop verbeuse, mais parfois une mise à jour peut être.