2009-10-19 10 views
1

J'ai deux tables, ils sont appelés MASTER et NEWDATA. Le schéma sur les deux tables est exactement le même et ils contiennent les noms de champs: CODE, SERIAL, MODEL, VALIDATED_DATE.MySQL: Code pour comparer 2 tables, puis si ligne est la même mise à jour date maître

Je veux vérifier si les valeurs dans le champ CODE existent dans la table NEWDATA et dans la table MASTER. Si elles sont dans les deux tables, je veux mettre à jour le VALIDATED_DATE à now() dans la table MASTER.

J'ai beaucoup d'enregistrements donc je suis curieux de savoir quel est le moyen le plus rapide de le faire?

Merci!

+0

À combien s'élèvent les «lots» d'enregistrements, environ? – Seb

Répondre

1
update master m inner join newdata n on n.code=m.code set m.validated_date = now() 

La colonne code doit être indexé pour que cela fonctionne efficacement. Étant donné qu'il devrait être rapide, beaucoup plus rapide que la méthode de sous-requête que d'autres ont suggéré (sauf si vous utilisez mysql 5.4, l'exécution de la sous-requête corrigée de mysql est fondamentalement totalement non optimisée).

1
UPDATE MASTER M 
    Set VALIDATED_DATE = Now() 
WHERE EXISTS (SELECT NULL 
       FROM NEWDATA AS ND 
       WHERE ND.CODE = M.CODE) 
0

Si vous définissez votre VALIDATED_DATE pour réinitialiser lui-même à la current time on update, une mise à jour simple de n'importe quelle colonne (donné un index sur CODE) devrait être assez rapide.

Questions connexes