2009-06-16 6 views
0

J'ai une table de groupes, de personnes, et une table plusieurs-à-plusieurs de group_id, person_id paires. group a une colonne de comptage qui devrait stocker le nombre actuel de personnes dans chaque groupe. Je voudrais mettre à jour cette information dans une commande SQL si je peux. J'imagine qu'une sorte de sous-requête me permettrait d'accomplir cela, mais je ne sais pas comment.Mise à jour d'une table basée sur le nombre() de sa table plusieurs-à-plusieurs

Cette requête me donne avec succès une cartographie de group_ids à leur nombre

SELECT `group_id`, COUNT(`group_id`) FROM `group-person` GROUP BY `group_id`; 

Cette requête échoue, mais si cela a fonctionné, ce serait ce que je suis en train de faire

UPDATE `group`,`group-person` WHERE `group`.`id` = `group-person`.`group_id` 
SET `group`.`count` = COUNT(`group-person`.`group_id`) 
GROUP BY `group-person`.`group_id`; 
+0

vous ne pouvez pas faire GROUP BY dans la requête de mise à jour, –

+0

Ouais, je sais, la requête échoue, c'était juste comment je l'imaginais que cela pourrait fonctionner. – dimo414

Répondre

2
UPDATE `group` 
SET `group`.`count` = (
    SELECT COUNT(*) 
    FROM `group_person` 
    WHERE `group_person`.`group_id` = `group`.`id` 
) 
+0

Wow, je suis impressionné, c'était très rapide. – dimo414

+0

Je crains que c'est ce qui se passe lorsque vous vous souvenez de la norme 'SQL-86'. –

Questions connexes