2012-09-16 3 views
0

J'ai une tableUPDATE col basé sur GROUP BY

id | title | ... 
––---------------- 
1 | test A | ... 
2 | test C | ... 
3 | test B | ... 
4 | test C | ... 
5 | test B | ... 
6 | test X | ... 

Et je veux ajouter une colonne basée sur requête GROUP BY: SELECT * FROM table GROUP BY title

id | title | group_id (int) 
––-------------------------- 
1 | test A | 1 
2 | test C | 2 
3 | test B | 3 
4 | test C | 2 
5 | test B | 3 
6 | test X | 4 

group_id n'a pas besoin d'être important, il doit juste être la même valeur sur la ligne qui ont la même valeur et différente de l'autre.

Comment est-ce que je peux faire ceci?

Merci.

PS: Désolé pour mon anglais, je suis français.

+2

Si "*' group_id' ne doit pas être significatif *", pourquoi ne pas' la table SET MISE À JOUR group_id = title'? – eggyal

+0

'group_id' doit être un int – aLt

+0

Pourquoi? Si c'est indexé, que gagne-t-on en en faisant un entier insignifiant? – eggyal

Répondre

1

Bien donné vous modifiez la table et ajoutez la nouvelle colonne ParentID? Quelque chose comme

UPDATE ATable t 
    INNER JOIN (
    SELECT 
     Title, 
     MIN(ID) AS ID 
    FROM ATable 
    GROUP BY Title 
) m ON t.Title = m.Title 
SET t.ParentID = m.ID 
+0

Merci, ça marche parfaitement! – aLt