Steffen: SQL Abfrage, Problem bei Formulierung

Beitrag lesen

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:  
>   
> ~~~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:  
>   
> - [Einführung in Joins](http://aktuell.de.selfhtml.org/artikel/datenbanken/joins/)  
> - [Fortgeschrittene Jointechniken](http://aktuell.de.selfhtml.org/artikel/datenbanken/fortgeschrittene-joins/)  
>   
>   
> Freundliche Grüße  
>   
> Vinzenz  
  
  
  
Vielen DAnk hab des jetzt mit LEFT JOIN gemacht. Ja ich weiß des hört sich da alles verwirrend an, aber ich kann in der Datenbank nur Tabellenhinzufügen. Also ich kann keine bestehenden Tabellen verändern