Quelle est une bonne façon de calculer la différence (en un sens ce qui devrait être ajouté et supprimé d'une table pour en obtenir une autre) entre les tables de MySQL?Comment calculer la différence entre les tables dans MySQL?
Répondre
Vous pouvez également utiliser une jointure externe gauche (la première vous indique où il existe une ligne dans le tableau a et non b, le deuxième vice-versa):
SELECT a.id FROM a LEFT JOIN b ON a.id = b.id WHERE b.id IS NULL
SELECT b.id FROM b LEFT JOIN a ON b.id = a.id WHERE a.id IS NULL
SELECT DISTINCT id FROM a WHERE NOT EXISTS (SELECT * FROM b WHERE a.id = b.id);
SELECT DISTINCT id FROM b WHERE NOT EXISTS (SELECT * FROM a WHERE a.id = b.id);
Aucune des réponses postées Jusqu'à présent (de BrynJ et Vadim) fait un travail très approfondi. Et faire le travail minutieux est également incroyablement difficile. Les deux réponses supposent qu'il suffit de savoir quels numéros d'identification sont présents dans chaque table. Cependant, en général, les tables ont plus d'une colonne.
Appelons les tableaux A et B.
Une question importante est « ne les deux tables ont le même schéma »? Si ce n'est pas le cas, un problème est de savoir quelles colonnes doivent être ajoutées à A et lesquelles doivent être ajoutées à B pour rendre leurs schémas identiques. Ceci est une requête de métadonnées, qui dépend du catalogue système. Les valeurs à insérer dans les colonnes ajoutées aux tables sont une question intéressante. Supposons que les tables ont réellement le même schéma, y compris la même clé primaire et les mêmes dépendances fonctionnelles entre les colonnes. Supposons également qu'il existe une colonne ID (stockant un entier unique), une colonne Name (une chaîne) et une colonne RefDate de type DATE.
Table A Table B
ID Name RefDate ID Name RefDate
1 Frederick 2007-01-23 1 Josephine 2009-01-10
Maintenant, que faut-il insérer, supprimer, mettre à jour à partir de chaque table pour les rendre identiques?
Je pense qu'il est juste de dire qu'il n'y a pas de réponse unique à cela sans connaître beaucoup plus de contexte. Il se peut que Frederick ait subi une chirurgie de changement de genre depuis 2007, et l'entrée dans B représente sa nouvelle identité. Ou ce pourrait être une gaffe; la base de données ne doit pas stocker ces deux enregistrements. Ou il pourrait y avoir une autre résolution. Malheureusement, les requêtes de BrynJ et Vadim indiqueraient qu'il n'y a pas de différence entre A et B, ce qui est une proposition douteuse pour moi. Incidemment, notez que la comparaison des lignes lorsque les lignes peuvent avoir des valeurs nulles est plus complexe que quand elles ne le sont pas. Par exemple, considérez les noms: comparaison
Pas NULLS:
(A.Name = B.Name)
Avec: nulls
(A.Name = B.Name OR (A.Name IS NULL AND B.Name IS NULL))
Raison de plus pour éviter nulls chaque fois que vous le pouvez.
- 1. SQL calculer la différence entre les valeurs de la cellule
- 2. Comment calculer l'intervalle entre datetime dans MySQL?
- 3. Date Différence dans MySQL pour calculer l'âge
- 4. La différence entre les boucles
- 5. Quelle est la différence entre latin1_general_ci et utf8_bin dans MYSQL
- 6. Quelle est la différence entre utf8_general_ci et utf8_unicode_ci dans MySql?
- 7. Différence entre MySQL .zip et .msi télécharger
- 8. Oracle - différence ou changements entre deux lignes de deux tables
- 9. comment trouver des relations entre les tables
- 10. Trouver la différence dans le nombre de lignes de deux tables dans MySQL
- 11. Comment trouver la différence entre deux chaînes?
- 12. Différence entre les différents types de SQL?
- 13. Comment obtenir la différence de 2 colonnes dans MySQL
- 14. Comment ajouter une relation entre deux tables dans Mysql en utilisant le centre de contrôle Mysql
- 15. Différence entre les délégués application
- 16. Différence entre les versions IE6
- 17. Différence entre les surcharges Expression.Call?
- 18. La différence entre les chaînes de connexion dans SQLCLR
- 19. Mysql joindre les tables question
- 20. Comment activer les jointures entre bases de données dans mysql?
- 21. Requête MySql, combiner les tables
- 22. MySQL Requête pour calculer la semaine précédente
- 23. Énumérer les tables utilisées dans la requête mysql?
- 24. Quelle est la différence entre les compléments et les macros?
- 25. La différence entre les logiciels libres et les logiciels libres
- 26. calculer la période entre deux monthcalender en C#
- 27. Différence entre les opérations et les threads dans Cocoa
- 28. Différence entre mysql et sql server? Performance, fonctionnalités, ...?
- 29. différence entre l'utilisation de la liste et à gauche rejoindre
- 30. Quelle est la différence entre les licences open source