UPDATE Users
SET GeneralPoint =(SELECT PostResult.AveragePoint FROM Users
LEFT JOIN (SELECT AVG(PostsLikes.PostPoint) AS AveragePoint , PostsLikes.ID_User
FROM PostsLikes,Users
WHERE PostsLikes.ID_User = Users.Id
GROUP BY PostsLikes.ID_User) PostResult
ON Users.Id = PostResult.ID_User)
3 Réponses :
Vous pouvez utiliser une sous-requête corrélée:
UPDATE u
SET u.GeneralPoint = (SELECT AVG(pl.PostPoint) FROM PostsLikes pl WHERE pl.ID_User = u.id )
FROM Users u;
J'ai écrit comme ça. Mais cette sous-requête retourne plus de valeur
@ Samirh-evhemzeyev. . . Ensuite, vous n'avez pas écrit comme ça. La sous-requête corrélée renvoie exactement une rangée avec une colonne.
--This should update all the user columns with the subquery values
--This works as it joins the Users table on your subquery by Users.Id
--I added the Users.Id value to the initial sub-query so you can join on it for the update
UPDATE Users
SET GeneralPoint = x.AveragePoint
FROM Users AS u
INNER JOIN
(SELECT PostResult.AveragePoint, Users.Id FROM Users
LEFT JOIN (SELECT AVG(PostsLikes.PostPoint) AS AveragePoint , PostsLikes.ID_User
FROM PostsLikes,Users
WHERE PostsLikes.ID_User = Users.Id
GROUP BY PostsLikes.ID_User) PostResult
ON Users.Id = PostResult.ID_User) AS x
ON x.Id = u.Id
Reference to Update with a Select statement: (How do I UPDATE from a SELECT in SQL Server?)
Utiliser Joindre
UPDATE u set GeneralPoint =b.avg_val from Users u join (SELECT AVG(pl.PostPoint) avg_val,pl.ID_User FROM PostsLikes pl group by pl.ID_User ) b on u.Id=b.ID_User
Cette sous-requête retourne quatre éléments, je veux écrire chacun d'eux sur "Generalpoint" de chaque utilisateur.
Vous voulez donc que tous les enregistrements d'utilisateur ont une valeur spécifique ou essayez-vous de faire une mise à jour code> moulin code> avec un
sélectionner code>?Oui. J'ai 10 utilisateur dans la table des utilisateurs. Mais je veux écrire sur le point général de l'utilisateur pour seulement 4 utilisateur. Parce que cette sous-requête retourne 4 valeur.