Guten Morgen in die Runde,
ich habe hier ein Phänomen, dem ich bisher nicht auf die Schliche gekommen bin. Es geht letztendlich um die Überprüfung eines Datenimports in eine MySQL Datenbank. Um zu prüfen, ob vorangegangene Importe korrekt waren, importiere ich die Daten nochmals in eine andere Tabelle. Das Problem trat auf beim Vergleich der vorhandenen Tabelle mit der Kontrolltabelle.
Ein „SELECT count(*) FROM vorhanden / kontrolle WHERE lieferant = ‚dieser‘“ ergibt bei beiden Tabellen unterschiedliche Anzahl von Datensätzen (Es geht um ca. 1400 Unterschied bei ca. 1,3 Mio Datensätzen, also nichts was ein Mensch so lesen könnte).
Also war meine Überlegung, entweder enthält die eine Tabelle noch andere Datensätze, die in der anderen niocht vorhanden sind, oder es sind evtl. Datensätze doppelt vorhanden. Ein „SELECT … FROM vorhanden / kontrolle GROUP BY bestellnr HAVING count(*) > 1“ ergibt keine doppelten Datensätze.
Also versuche ich die fehlenden Datensätze durch ein LEFT JOIN zu finden:
„SELECT vorhanden.bestellnr FROM vorhanden
LEFT JOIN kontrolle ON vorhanden.bestellnr = kontrolle.bestellnr
WHERE kontrolle.bestellnr IS NULL“
ergibt keine Datensätze. Auch nicht umgekehrt. Nach den Join Abfragen gibt es keine unterschiedlichen Datensätze, Nach count() aber eine unterschiedliche Anzahl, was ja nicht zusammen passt.
Erst ein Subselect enthüllt die gesuchten Datensätze:
„SELECT bestellnr FROM vorhanden
WHERE bestellnr NOT IN
(SELECT bestellnr FROM kontrolle)“.
Die Anzahl stimmt auch mit der Differenz zwischen den count() Ergebnissen überein.
Warum erhalte ich mit dem Subselect andere (korrekte) Ergebnisse, während ein LEFT JOIN keine Ergebnisse liefert ? Habe ich da etwas grundsätzlich falsch verstanden ?? Ich benutze MySQL 5.5.27 auf einem xampp (-Testsystem).
Danke im Voraus für alle hilfreichen Hinweise.
lo.