Comment mettre à jour une colonne d'une table à l'aide d'une fonction d'agrégation dans l'instruction sql update
?mise à jour avec la valeur renvoyée par la fonction d'agrégat
Répondre
La fonction Agréger agrège, par définition, un ou plusieurs enregistrements de l'entrée dans un seul enregistrement dans un jeu de résultats, de sorte qu'il n'est pas évident de savoir lequel vous voulez mettre à jour.
En général, vous pouvez utiliser des fonctions d'agrégation dans une sous-requête:
UPDATE mytable
SET mycol =
(
SELECT SUM(othercol)
FROM othertable o
WHERE o.yetothercol = m.yetmycol
)
, dans un JOIN
(œuvres en MySQL
et SQL Server
)
UPDATE mytable
JOIN (
SELECT yetothercol, SUM(othercol) AS psum
FROM othertable
GROUP BY
yetothercol
) s
ON yetmycol = yetothercol
SET mycol = psum
, ou dans une déclaration MERGE
(œuvres Oracle
et SQL Server 2008
):
MERGE
INTO mycol
USING (
SELECT yetothercol, SUM(othercol) AS psum
FROM othertable
GROUP BY
yetothercol
) s
ON (yetmycol = yetothercol)
WHEN MATCHED THEN
UPDATE
SET mycol = psum
J'ai une question concernant la première suggestion. Comment être sûr que l'ordre de la sous-requête est correct pour asigner des valeurs à myco? Vous spécifiez m.yetmycol dans la clause where (je suppose que vous voulez dire mytable comme m). Comment savez-vous si cela va sortir dans l'ordre de o.yetothercol ou m.yetmycol? Est-ce prévisible? (Je pensais que ça ne devrait pas être une autre question, mais peut-être que ce serait plus facile à demander.) –
@Etiennebr: qu'entendez-vous par "l'ordre de la sous-requête"? – Quassnoi
Eh bien, je ne suis pas sûr de la terminologie ici, mais la requête contenant la jointure ressemble à une sous-requête (il y a une requête SELECT dans une requête UPDATE). Et je pense avoir répondu moi-même à ma question. La commande est garantie par o.yetothercol = m.yetmycol et le fait que m est en dehors de la première requête. –
- 1. Mise à jour avec fonction de la valeur semble seulement d'évaluer la fonction une fois
- 2. Question concernant la valeur renvoyée par WebAuthenticationDetails.getRemoteAddress()
- 3. DataMapper mise à jour valeur ENUM par la forme
- 4. Mise à jour avec modification de la valeur de consigne
- 5. Valeur renvoyée indiquant la réussite de la mise à jour/l'échec de la procédure stockée SQL Server via ADO/VBA
- 6. avec mise à jour en utilisant la fonction scalaire
- 7. Plus d'aide nécessaire avec la fonction récursive et la valeur renvoyée
- 8. SQL: mise à jour avec la valeur de l'autre table en fonction de l'horodateur
- 9. mise à jour Doctrine_Query avec valeur flottante
- 10. Comment affecter des valeurs à la zone de sélection ou à une valeur cachée renvoyée par la fonction
- 11. Modifier La valeur du texte n'est pas mise à jour
- 12. Fonction Python renvoyée Aucune après la récursion
- 13. Comment sélectionner une valeur de colonne correspondant à une ligne renvoyée par une fonction d'agrégat MySQL?
- 14. Fonction de mise à jour
- 15. Mise à jour et fonction
- 16. Comment régler le chemin Temp c'est à dire. la valeur renvoyée par Path.GetTempPath()?
- 17. Drupal: la mise à jour avec Drush ne change pas l'état de la mise à jour
- 18. Valeur d'incrémentation dans la requête de mise à jour mysql
- 19. Ligne de mise à jour AspxGridview Valeur par défaut
- 20. Comment puis-je modifier la valeur renvoyée par WindowsIdentity.GetCurrent dans ASP.net?
- 21. Écouter des appels de fonction PHP pour intercepter la valeur renvoyée
- 22. Valeur renvoyée à partir de la procédure stockée
- 23. UIScrollView sur la méthode de mise à jour par défilement
- 24. mise à jour MySQL et ajouter de la valeur à la valeur existante
- 25. jour valeur de la fonction int
- 26. Comment appeler une fonction après la fin de la mise à jour dans un panneau de mise à jour?
- 27. Mise à jour sur la ligne pour chaque groupe avec la valeur maximale dans l'autre colonne
- 28. Mettre à jour le dictionnaire lié en fonction de la valeur éditée par NSTextFieldCell
- 29. Demande de conseil: mise à jour d'un formulaire en fonction de la valeur DropdownList
- 30. Problème de la fonction de mise à jour Mysql php
C'est trop vague, mais cela semble un peu suspect, dans un genre de dénormalisation. S'il vous plaît donnez quelques détails de ce que vous essayez de réaliser, afin que nous puissions mieux répondre à votre question. – APC