SQL-Abfragen - Vergleich zweier Tabellen

Hallo,

ich kämpfe schon seit geschlagenen zwei Stunden mit PHPMyAdmin bzw. einer SQL-Abfrage. Aber meine Bemühungen mit FULL OUTER JOIN, INNER JOIN, UNION etc. waren allesamt erfolglos :frowning:

Ich möchte zwei Tabellen T1 und T2 vergleichen. T1 befindet sich in Datenbank D1. T2 befindet sich in der Datenbank D2.

Beide Tabellen haben den gleichen Aufbau (identische Felder) und das eindeutige Feld Id (int6).

Die SQL-Abfrage soll nun die beiden Tabellen vergleichen und diejenigen Id’s ausgeben, bei denen die Feldinhalte in T1 und T2 nicht übereinstimmen.

Lässt sich dies mittels einer SQL-Abfrage bewerkstelligen?

Lieben Dank im Voraus und beste Grüße

Anni

Moin,

Lässt sich dies mittels einer SQL-Abfrage bewerkstelligen?

Nein. Du brauchst 2 Statements. Das Ergebnis der ersten zwischenpuffern in z. B. php-Array.

Gruß
widecrypt

Servus Anni,

ich kenne PHP nicht, aber rein von der Syntax her könnte das hier gehen:

SELECT tabelle1.id
FROM tabelle1
EXCEPTION JOIN tabelle2 ON tabelle2.feld1 = tabelle1.feld1
AND tabelle2.feld2 = tabelle1.feld2
AND …
AND tabelle2.feld99 = tabelle1.feld99

UNION ALL

SELECT tabelle2.id
FROM tabelle2
EXCEPTION JOIN tabelle1 ON tabelle1.feld1 = tabelle2.feld1
AND tabelle1.feld2 = tabelle2.feld2
AND …
AND tabelle1.feld99 = tabelle2.feld99

D.h., du selektierst alle Sätze die hier sind aber nicht dort,
UNION alle die dort sind aber nicht hier, die Verknüpfung findet
über alle Felder statt damit du Unterschiede in irgend einem Feld
feststellen kannst.

Das Problem wird eher sein, dass dein System nur die Verbindung zu
einer DB zu einer Zeit zulässt, du also nur Abfragen auf eine DB
ausführen kannst und nicht auf zwei parallel.

Aber vllt könntest du deine Tabellen zunächst in die Datenbank3 kopieren
und dann das obige Statement dagegen formulieren ?

Hoffe die Idee hilft dir weiter .

Gruß,
SomeOne

Moin,

ich glaub du hast da was überlesen.
Tabelle1 ist in DB1 und Tabelle2 in DB2.

Gruß
widecrypt

… weswegen ich ja …
… geschrieben hatte

Das Problem wird eher sein, dass dein System nur die Verbindung zu
einer DB zu einer Zeit zulässt, du also nur Abfragen auf eine DB
ausführen kannst und nicht auf zwei parallel.

Aber vllt könntest du deine Tabellen zunächst in die Datenbank3 kopieren
und dann das obige Statement dagegen formulieren ?

Auch Moin,

wie du siehst habe ich das Problem mit den beiden DBs durchaus erfasst.
Ob das so wie o.g. geht weiss ich nicht, hängt vom DBMS ab.

Wir werden es ja vom UP hören, hoffe ich.

Gruß,
SomeOne

Das Problem wird eher sein, dass dein System nur die
Verbindung zu einer DB zu einer Zeit zulässt, du also
nur Abfragen auf eine DB ausführen kannst und nicht
auf zwei parallel.

Aber vllt könntest du deine Tabellen zunächst in die
Datenbank3 kopieren und dann das obige Statement dagegen
formulieren ?

Hi Someone,

also das sieht schon mal ziemlich gut aus. Ich habe hier nur das (von Dir richtigerweise erkannte) Problem, dass unsere Datenbanken bei 1&1 liegen und hier offenbar keine Abfragen über mehrere Datenbanken möglich sind. Jetzt versuch’ ich es über den Umweg, die beiden Tabellen in *einer* Datenbank zu vergleichen. Ich melde mich dann, ob es geklappt hat.

Lieben Dank und viele Grüße

Anni

Moin,

wie du siehst habe ich das Problem mit den beiden DBs durchaus
erfasst.

Sorry, das hatte ich überlesen.

Ob das so wie o.g. geht weiss ich nicht, hängt vom DBMS ab.

Er schreibt PHPMyAdmin. Also MYSql. Somit in 95% aller Fälle MYISAM-Engine.

In php wärs einfach. Result aus Statement 1 in ArrayA und Result aus Statement 2 in ArrayB. Arrays verschmelzen (oder mit Vergleich abklappern) und Dupletten nicht in ArrayC schieben. ArrayC ausgeben, in DB pumpen, whatever…

Gruß
widecrypt