2010-03-26 6 views
1

J'ai deux tables, avec la même structure, par exemple: table "first" avec les colonnes 'a', 'b', 'c' et la table 'second' avec les mêmes colonnes. ? betweet ces deux tables Bien sûr, je peux faire un script sur python, qui fera ensemble (a) -set (b), mais je pense qu'il ya une façon de le faire dans une base MySQLdiff entre les tables

UPD.

Table 'first' 
a |b |c 
====|====|==== 
a1 |b1 |c1 
a2 |b2 |c2 
a3 |b3 |c3 

Table 'second' 
a |b |c 
====|====|==== 
a2 |b2 |c2 
a3 |b3 |c3 
a4 |b4 |c4 

le résultat que je besoin est quelque chose comme ça:

Table 'first-second' 
a |b |c 
====|====|==== 
a1 |b1 |c1 

Ou

Table 'second-first' 
a |b |c 
====|====|==== 
a4 |b4 |c4 
+0

mysql ne supporte pas l'opérateur "moins"; il suffit de mettre union. –

Répondre

6

Vous pouvez essayer une jointure externe. Par exemple, vous pouvez trouver les lignes présentes dans le tableau first mais absentes dans le tableau second comme celui-ci (non testé):

SELECT first.a, first.b, first.c FROM first LEFT JOIN second USING(a,b,c) 
WHERE second.a IS NULL 

Le join vous donne un tableau contenant toutes les lignes présentes dans first, comme ceci:

first.a first.b first.c second.a second.b second.c 
    a1  b1  c1  NULL  NULL  NULL 
    a2  b2  c2  a2  b2  c2 

Vous n'avez plus qu'à rechercher les lignes avec second.a IS NULL pour rechercher les lignes absentes dans second.

Les performances peuvent être médiocres, car vous devez joindre toutes les colonnes.

0

Jetez un oeil à MySQL Diff Tool

La réponse acceptée mentionne un outil Toad® for MySQL qui peut être utilisé.

+0

Eh bien, je pensais que cela pourrait être fait avec l'aide d'une requête mysql. – user285070

0

des moyens de différence? différencier les champs en écrivant des requêtes ??? vous pouvez utiliser first.a, second.a etc lors de l'écriture des requêtes.! (espoir je lui ai répondu ur question, sinon: jeter plus de lumière sur la question tat je comprends mieux)

+0

ajouté un exemple =) – user285070

0

Vous voulez ceci:

select column_name 
from information_schema.columns 
where 
    table_name = 'FirstTable' 
    and table_schema = 'DatabaseHoldingFirstTable' 
    and column_name not in (
     select column_name 
     from information_schema.columns 
     where table_name = 'SecondTable' 
     and table_schema = 'DatabaseHoldingSecondTable' 
    ); 
+0

oh attendez, vous voulez différer le contenu de la table, pas la structure de la table. ça ne fait rien... –