Hallo
Ich habe zwei Tabellen in der DB, welche anhand ihrer Inhalte verglichen werden sollen. Ich würde anschließend gerne den Rest (also das was nicht in beiden Tabellen vorkommt) auslesen und zwar in einer WHILE Schleife (PHP).
Verstehe ich Dich richtig:
Du möchtest die Zeilen ausgeben, die genau in einer der beiden Tabellen vorkommen.
Ich habe schon etliche Forenbeiträge durchkämmt. Soweit mir bekannt lässt sich dies nicht mit NOT IN (subselect) lösen sondern eher mit LEFT JOIN?
Dann ist Dir nicht alles bekannt :-) Sowohl LEFT JOIN als auch NOT IN läßt sich für Dein Problem verwenden.
(obiges fuktioniert nicht)
"Funktioniert nicht" ist leider keine Fehlerbeschreibung:
Welches Ergebnis erhältst Du?
Welches Ergebnis erwartest Du?
Wo liegt die Abweichung vom erwarteten Ergebnis?
Zurück zu Deinem Problem:
Du suchst die Datensätze, die in der Vereinigungsmenge der beiden Tabellen vorkommen, aber nicht in der Schnittmenge:
Gib mir alle Datensätze, die in Tabelle tab1 vorkommen, aber nicht in Tabelle tab2. Nimm dazu alle Datensätze, die in Tabelle tab2 vorkommen, aber nicht in Tabelle tab1:
SELECT -- Gib mir alle
tab1.tab_item -- Items
FROM tab1 -- aus Tabelle tab1,
WHERE tab1.tab_item NOT IN ( -- die nicht
SELECT -- in den
tab2.tab_item -- Items
FROM tab2 -- aus Tabelle tab2
) -- vorkommen
UNION -- und nehme dazu
SELECT -- alle
tab2.tab_item -- Items
FROM tab2 -- aus Tabelle tab2,
WHERE tab2.tab_item NOT IN ( -- die nicht
SELECT -- in den
tab1.tab_item -- Items
FROM tab1 -- aus Tabelle tab1
) -- vorkommen
Analog könntest Du das mit 2x LEFT JOIN und UNION aufbauen, geht auch.
Eine weitere Möglichkeit hättest Du mit einem FULL JOIN und diversen Funktionen wie COALESCE() ...
Viele Wege führen zum gewünschten Ergebnis, hoffentlich unterstützt Dein Datenbankmanagementsystem die entsprechende Abfrage.
Freundliche Grüße
Vinzenz