J'ai une question générique que je vais essayer d'expliquer en utilisant un exemple.MySQL/SQL: Mise à jour avec sous-requête corrélée de la table mise à jour elle-même
Dire que j'ai une table avec les champs: « id », « name », « catégorie », « rapport » « apparences » et
L'idée est que j'ai plusieurs éléments, chacun liés à un seul catégorie et "apparaît" plusieurs fois. Le champ de ratio doit inclure le pourcentage d'apparitions de chaque élément sur le nombre total d'apparitions d'éléments dans la catégorie.
En pseudo-code ce que je dois est le suivant:
Pour chaque catégorie
trouver la somme totale des apparences pour les éléments qui s'y rattachent. Par exemple, il peut être fait avec (select sum("appearances") from table group by category
)Pour chaque élément
définir la valeur du rapport que les apparences de l'élément divisé par la somme trouvée pour la catégorie ci-dessus
Maintenant, je suis essayer d'y parvenir avec une seule requête de mise à jour, mais ne peut pas sembler le faire. Ce que je pensais que je devrais faire est:
update Table T
set T.ratio = T.appearances/
(
select sum(S.appearances)
from Table S
where S.id = T.id
)
Mais MySQL n'accepte pas le T alias dans la colonne de mise à jour, et je n'a pas trouvé d'autres moyens d'y parvenir.
Des idées?
Veuillez marquer une réponse comme réponse afin que cette question soit retirée de la liste des questions sans réponses :) –
@Frans: J'ai dû attendre 48 heures avant que je puisse le faire, règles de stack-overflow :) –
Nice. Merci d'avoir pris le temps de donner un exemple complet! – Ben