oracle diff: comment comparer deux tableaux?

supposons que j'ai deux tableaux, t1 et t2 qui sont identiques dans la mise en page mais qui peuvent contenir des données différentes.

Quelle est la meilleure façon de différencier ces deux tables?

25
demandé sur Mark Harrison 2009-03-27 07:16:58
la source

10 ответов

vous pouvez utiliser un outil comme AQT pour créer des diffs entre les tables.

une autre approche serait de vider les tableaux dans un fichier texte et d'utiliser un outil diff comme WinMerge . Avec cette approche, vous pouvez utiliser le SQL complexe pour transformer les tables dans la même disposition, d'abord.

5
répondu Aaron Digulla 2009-03-27 13:00:15
la source

essayez ceci:

(select * from T1 minus select * from T2) -- all rows that are in T1 but not in T2
union all
(select * from T2 minus select * from T1)  -- all rows that are in T2 but not in T1
;

pas d'outil externe. Aucun problème de performance avec union all .

47
répondu L. Holanda 2015-02-21 22:29:51
la source

vous pouvez essayer d'utiliser les opérations de jeu: MINUS et INTERSECT

Voir ici pour plus de détails: http://oreilly.com/catalog/mastorasql/chapter/ch07.html

13
répondu maxyfc 2009-03-27 07:21:09
la source

Pour ce genre de question, je pense que vous devez être très précis sur ce que vous recherchez, il existe de nombreuses façons de l'interpréter et de nombreuses approches différentes. Certaines approches vont être un trop gros marteau si votre question ne le justifie pas.

au niveau le plus simple, il y a "est-ce que les données du tableau sont exactement les mêmes ou pas?", que vous pourriez essayer de répondre avec une simple comparaison de compte avant de passer à quelque chose de plus complexe.

À l'autre extrémité de l'échelle, il n'existe "montrez-moi les lignes de chaque table pour lesquelles il n'existe pas un équivalent en ligne dans l'autre table" ou "montre-moi où les lignes ont le même identifiant de la clé, mais différentes valeurs de données".

si vous voulez réellement synchroniser la Table A avec la Table B, alors cela pourrait être relativement simple, en utilisant une commande de fusion.

2
répondu David Aldridge 2009-03-27 17:45:59
la source

vous pouvez essayer dbForge Data Comparer pour Oracle , a **Gratuit outil GUI pour la comparaison et la synchronisation des données, qui peut faire ces actions sur toute la base de données ou en partie.

alt text

2
répondu Devart 2010-09-24 17:56:44
la source

si vous avez de l'argent à dépenser, utilisez L'outil PowerDIFF pour Oracle: http://www.orbit-db.com . Il est livré avec un certain nombre d'options de comparaison et fait ces types d'emplois excellemment.

1
répondu 2009-04-07 12:50:45
la source

solution Rapide:

SELECT * FROM TABLE1
MINUS
SELECT * FROM TABLE2

aucun enregistrement ne doit montrer...

1
répondu Joan Vilariño 2013-01-16 19:23:02
la source

select * from table1 where table1.col1 in (select table2.col1 from table2)

en présumant que col1 est la colonne de la clé primaire et cela donnera toutes les lignes dans table1 respectivement à la colonne table2 .

select * from table1 where table1.col1 not in (select table2.col1 from table2)

Espérons que cette aide

0
répondu Kumar 2014-01-30 21:39:15
la source

, Essayez:

select distinct T1.id
  from TABLE1 T1
 where not exists (select distinct T2.id
                     from TABLE2 T2
                    where T2.id = T1.id)

avec sql oracle 11g+

0
répondu KingRider 2017-02-01 15:22:00
la source

en plus de certaines autres réponses fournies, si vous voulez examiner les différences dans la structure des tableaux avec un tableau qui pourrait avoir la structure similaire mais différente, vous pouvez le faire de plusieurs façons:

premier - si vous utilisez Oracle SQL Developer, vous pouvez exécuter une describe sur les deux tables pour les comparer:

descr TABLE_NAME1
descr TABLE_NAME2

deuxième - la première solution peut ne pas être idéale pour tableaux plus grands avec beaucoup de colonnes. Si vous voulez seulement voir les différences dans les données entre les deux tables, alors comme mentionné par plusieurs autres, en utilisant L'opérateur SQL moins devrait faire le travail.

troisième - si vous utilisez Oracle SQL Developer, et vous voulez comparer la structure des tables de deux tables en utilisant des schémas différents, vous pouvez faire ce qui suit:

  1. Sélectionner" Outils
  2. Sélectionner "Base De Données Diff "
  3. Sélectionnez "Source Connection"
  4. Sélectionner "Destination Connection"
  5. sélectionnez les" types D'objets Standard "que vous souhaitez comparer
  6. entrez le" nom de la Table "
  7. Cliquez sur "Suivant" jusqu'à ce que vous atteignez "Terminer"
  8. Cliquez Sur "Terminer "
  9. NOTE: dans les étapes 3 et 4 est où vous choisiriez les différents schémas dans lesquels les objets existent que vous souhaitez comparer.

quatrième - si les tableaux deux tableaux que vous souhaitez comparer ont plus de colonnes, sont dans le même schéma, n'ont pas besoin de comparer plus de deux tableaux et sont peu attrayants pour comparer visuellement à l'aide de la commande DESCR, vous pouvez utiliser ce qui suit pour comparer les différences dans la structure du tableau:

select 
     a.column_name    || ' | ' b.column_name, 
     a.data_type      || ' | ' b.data_type, 
     a.data_length    || ' | ' b.data_length, 
     a.data_scale     || ' | ' b.data_scale, 
     a.data_precision || ' | ' b.data_precision
from 
     user_tab_columns a,
     user_tab_columns b
where 
     a.table_name = 'TABLE_NAME1' 
and  b.table_name = 'TABLE_NAME2'
and  ( 
       a.data_type      <> b.data_type     or 
       a.data_length    <> b.data_length   or 
       a.data_scale     <> b.data_scale    or 
       a.data_precision <> b.data_precision
     )
and a.column_name = b.column_name;
0
répondu Rex CoolCode Charles 2018-06-21 22:01:41
la source

Autres questions sur