MySQL: zwei Datenbanken auf unterschieder vergleichen

MySQL, PostgreSQL, SQLite
perlitz
Posts: 202
Joined: 2003-11-01 12:25

MySQL: zwei Datenbanken auf unterschieder vergleichen

Post by perlitz » 2006-01-30 11:40

Hallo,

ich habe zwei Confixx datenbanken: 1. _confixx und 2. _confixx_backup.

Beide möchte ich nun auf relevante unterschiede vergleichen. Hauptsächlich Passwörter, Postfächer etc.

Versuche z.B. unterschiede des pop3 longpw feldes zu ermitteln, scheitern aufgrund meiner unwissenheit wie es scheint :cry:

Ein

Code: Select all

SELECT `longpw` FROM _confixx.pop3
bringt die passwörter aus _confixx.pop3. Ein

Code: Select all

SELECT `longpw` FROM _confixx_backup.pop3
die PW's aus _confixx_backup...
Dann sollte doch

Code: Select all

SELECT `longpw` FROM _confixx.pop3 WHERE `longpw` NOT IN (SELECT `longpw` FROM _confixx_backup.pop3) ;
die PW's bringen, welche nicht in der _confixx_backup sind. Scheibar Denke ich jedoch nicht ganz richtig :( denn es kömmt ein

Code: Select all

#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT `longpw` FROM _confixx_backup.pop3)' at line 1 
Was übersehe ich? Selber SQL auf Oracle tut's. Unabhängig davon, scheint mir das auch nicht der Ideale Weg die Datenbanken zu vergleichen, da ich hier ja alle Tabelle & Felder durchgehen müsste. :roll:

Hat jemand nen Tipp?
Thanx
Andreas

User avatar
isotopp
Posts: 471
Joined: 2003-08-21 10:21
Location: Berlin

Re: MySQL: zwei Datenbanken auf unterschieder vergleichen

Post by isotopp » 2006-01-30 18:32

Perlitz wrote:Was übersehe ich? Selber SQL auf Oracle tut's. Unabhängig davon, scheint mir das auch nicht der Ideale Weg die Datenbanken zu vergleichen, da ich hier ja alle Tabelle & Felder durchgehen müsste. :roll:
Dein MySQL ist welche Version ("select version()")? Kann die schon Subselects (4.1 oder besser)?

Warum verwendest Du keinen Left Join stattdessen?

Code: Select all

select a.id from _confixx.table as a left join _confixx_backup.table as b on a.id = b.id where isnull(b.id)
Listet alle a.id auf, für die keine b.id existiert.

Code: Select all

select a.id, a.longpw, b.longpw from _confixx.table as a join _confixx_backup.table as b on a.id = b.id where a.longpw <> b.longpw
Listet alle Account-IDs auf, für die sich die Paßworte zwischen Datenbank und Backup unterscheiden (erfordert jedoch, daß die Accounts im Backup auch vorhanden sind). (MySQL vergleicht varchar() per Default case-insensitiv, Pass und PASS sind also identisch, außer die Paßwort-Spalte ist BINARY definiert)

perlitz
Posts: 202
Joined: 2003-11-01 12:25

Re: MySQL: zwei Datenbanken auf unterschieder vergleichen

Post by perlitz » 2006-01-31 10:53

Danke!

Version: 4.0.24_Debian-10sarge1-log :roll:

Left join nimmt er auch nicht...

Na ja, hab mir jetzt beholfen, alles als dump csv zu exportieren und dann nen diff drüber laufen zu lassen :roll: Darf man zwar keinem erzählen, aber geht.

Und nachdem ich zig Software zu vergleichen zweier Datenbanke auf unterschiede gefunden habe, und alle >$150 kosten, scheints mir dann doch nicht so trivial.

Danke
Andreas