2009-10-04 4 views
1

J'ai importé des données dans la base de données mysql et essayé de les nettoyer.Mettre à jour la table MySQL en utilisant une correspondance entre 2 noms de champs (parent, catégorie enfant)

| ID | nom de la catégorie | nom du parent | PARENT_ID

1 Baseball (this is a parent) 
2 Ball | Baseball | null 
3 Bat | Baseball | null 
4 Glove | Baseball | null 
5 Basketball (this is a parent) 
6 Basket | Basketball | null 
7 Net | Basketball | null 

Comment dois-je faire une déclaration UPDATE je peux mettre à jour le parent_id de chaque sous-catégorie pour avoir l'ID parent? Donc au lieu de

2 Balle | Baseball | null

J'aime avoir

2 Ball | Baseball | 1

Répondre

4

MySQL ne vous permet pas normalement d'exécuter select et mettre à jour sur la même table, mais vous pouvez tromper à l'aide d'une « table dérivée »:

UPDATE categories 
SET parent_id = (
    SELECT id FROM (SELECT id, name FROM categories) c 
    WHERE c.name=categories.parent_name 
) 
WHERE parent_name IS NOT NULL 
+0

brillant! Merci!!!! –

Questions connexes