Hallo,
Tabelle1
Name Straße ID
Tabelle2
PLZ Nationalität ID
Mein Problem ist, ich möchte gerade alle Werte aus Tabelle2 angezeigt bekomme die eine ID haben, die nicht mit der aus der Tabelle1 übereinstimmen.
wenn ich Dich richtig verstehe, möchtest Du alle Datensätze aus Tabelle2 haben, deren ID in Tabelle1 nicht auftritt.
Ich hab des so gemacht, aber ich bekomme keine Wert zurück.
was nicht verwunderlich ist.
» SELECT PLZ Nationalität, tabelle2.ID
> FROM `Tabelle2` INNER JOIN Tabelle1 ON Tabelle2.id = Tabelle1.ID
-- aus der Kombination jedes Datensatzes aus Tabelle1 mit jedem Datensatz aus
-- Tabelle2 möchtest Du nur die Datensätze haben, bei denen die Werte in der
-- Spalte ID übereinstimmen.
-- Das Ergebnis dieser Operation schränkst Du durch die Bedingung ein,
> WHERE Tabelle1.ID != Tabelle2.id;
-- dass die Werte in der Spalte ID unterschiedlich sein müssen.
Was ist daran falsch
Wie können die Werte in der Spalte ID gleichzeitig gleich und gleichzeitig unterschiedlich sein?
Nochmals zu Deinem Ausgangsproblem:
Gib mir die Werte der Spalten
PLZ,
Nationalität
und ID
aus
Tabelle2
wobei mich nur die Datensätze interessieren
deren ID
nicht in der Liste der IDs aus Tabelle1 vorkommt.
übersetzen wir eins zu eins in SQL:
-- Gib mir die Werte der Spalten
SELECT
PLZ,
Nationalität,
ID
-- aus
FROM
Tabelle2
-- wobei mich nur die Datensätze interessieren
WHERE
-- deren ID nicht in
Tabelle2.ID NOT IN (
-- der Liste der IDs aus Tabelle1 vorkommt.
SELECT Tabelle1.ID FROM Tabelle1
)
oder nicht ganz so intuitiv mit einem OUTER JOIN und dem IS-NULL-Operator
SELECT
t2.PLZ,
t2.Nationalität,
t2.ID
FROM
Tabelle2 t2
LEFT JOIN
Tabelle1 t1
ON
t2.ID = t1.ID
WHERE
t1.ID IS NULL
Die zweite Version funktioniert auch mit uralten MySQL-Versionen (sprich 4.0 und älter), die ich nicht mehr im produktiven Einsatz sehen möchte, da sie bereits seit Jahren tot sind, d.h. dass es keinerlei Sicherheitsupdates für bekannte kritische Fehler mehr gibt.
Mehr zu Joins findest Du in unseren Datenbankartikeln zu den Joins:
Freundliche Grüße
Vinzenz