2010-06-25 6 views
0

Fondamentalement, je crée un tableau récapitulatif.Mysql Clé dupliquée/Supprimer

Le problème est que parfois les données de la table primaire sont modifiées manuellement. J'utilise une mise à jour de la clé DUPLICATE, mais j'ai aussi besoin de quelque chose comme ON MISSING KEY DELETE. Le résumé doit être mis à jour avec les données modifiées.

La meilleure solution est-elle vraiment de supprimer simplement tous les enregistrements de résumé et de relancer la requête INSERT SELECT? Cela ne semble pas être une bonne idée.

Les clés qui ne figurent pas dans la requête de sélection ne doivent pas figurer dans le tableau récapitulatif.

+0

ON MISSING KEY DELETE n'a aucun sens ... Comment pouvez-vous supprimer quelque chose qui n'est pas là? – simendsjo

+0

@Bill Karwin: Correct, j'ai posté que Before Coffee (tm). –

Répondre

1

Après avoir peuplé la summary_table, vous pouvez le faire:

DELETE s FROM summary_table s LEFT OUTER JOIN original_table o ON s.id = o.id 
WHERE o.id IS NULL; 

qui enlèvera de summary_table toutes les lignes où la id n'existe plus dans la table original_table.

Je ne pense pas que vous puissiez le faire en une seule fois.

+0

Ah, ça ressemble plus à ça. Le seul problème est que c'est un insert sélectionné, donc je vais devoir travailler un peu, mais c'est certainement la bonne direction. Merci! – jwzk

+0

Oui, la condition de jointure doit être plus complexe que l'exemple que j'ai montré ici. –

0

je ne suis pas sûr que je comprends, mais il semble que vous voulez Déclenche sur la table primaire pour INSERT et UPDATE qui ajoutent au résumé, et un autre déclencheur sur DELETE, qui REDUIT le résumé ...

0

Si la requête récapitulative est rapide et que les modifications sont sporadiques, vous pouvez simplement réexécuter le récapitulatif. Vous pouvez envisager d'utiliser des déclencheurs de sorte que vous supprimez 1 lors de la suppression, ajouter 1 lors de l'insertion, etc