2010-02-07 5 views
4

Salut les gars, j'ai besoin d'aide ici encore - j'ai deux tables ici contiennent tous deux beaucoup de disques dans les dizaines de milliers. Maintenant nous avons une table principale dont le schéma est comme ceci:SQL pour mettre à jour les enregistrements d'une table avec des enregistrements d'une autre table?

ID | Nom de l'emplacement | Label | Description | Longitude | La latitude

Et nous avons une autre table avec:

ID | Nom de l'emplacement | Longitude | Le problème est que les entrées de longitude et de latitude dans le premier tableau sont pour la plupart fausses :(- les informations correctes se trouvent dans la deuxième table, en supposant que les ID correspondent aux mêmes emplacements dans les deux tableaux comment puis-je corriger une requête qui met à jour le champ de longitude et de latitude de chaque ligne de la première table en fonction des entrées de la seconde table où les ID sont identiques ... des idées ici - je suis sur la base de données MySQL ...

EDIT =====

Remarque: Les deux tableaux ont 20 000 et 50 000 lignes respectivement ...

Répondre

3

Avec MySQL 4.0+ vous devriez être en mesure d'utiliser le INNER JOIN syntaxe ci-dessous:

UPDATE 
    new_table 
INNER JOIN 
    old_table ON (old_table.id = new_table.id) 
SET 
    new_table.latitude = old_table.latitude, 
    new_table.longitude = old_table.longitude; 

Sinon, vous devez également être en mesure de faire ce qui suit:

UPDATE 
    new_table 
SET 
    latitude = (SELECT latitude FROM old_table WHERE old_table.id = new_table.id), 
    longitude = (SELECT longitude FROM old_table WHERE old_table.id = new_table.id); 

Assurez-vous que les colonnes d'identité dans les deux tableaux avoir un index unique. Si elles sont définies comme une clé primaire, cela suffit.

+0

Je continue à obtenir un délai d'attente - en fait les lignes dans les deux tables sont 20 000 et 50 000 respectivement ... – Ali

+0

Avez-vous une expérience unique index sur les colonnes ID des deux tables? ... Si elles sont définies comme une clé primaire, cela suffit. –

2

Si les ID sont les clés primaires/index unique, vous pouvez utiliser REPLACE

REPLACE INTO bad_latlng (id,name,label,descr,lat,lng) 
SELECT 
b.id,b.name,b.label,b.descr,g.lat,g.lng 
FROM 
bad_latlng b JOIN good_latlng g ON(b.id = g.id) 
Questions connexes