PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datnfeld aus Tabelle1 mit allen Inhalten aus Tabelle2 vergleichen


Doc_McSky
17.06.2009, 15:43:27
Hallo Leute,

ich stehe mit meinen Standardkenntnissen in MySQL vor dem Problem eine einzige Abfrage kreieren zu wollen, die folgendes kann:

Hole aus Tabelle1 alle ID's und Namen, wobei die ID's nicht in Tabelle2 in der Spalte Vater auftauchen dürfen.

Geht das? Also das ich eine Tabelle auslese und dann mti den gerade ausgelesenen Werten einen bestimmten Eintrag einer zweiten Tabelle vergleiche ist ja kein Problem, aber dann alle Einträge prüfen, wie geht das genau?

ich habe mal so etwas wie das probiert:
SELECT tabelle1.id, tabelle1.name FROM tabelle1, tabelle2 WHERE tabelle2.vater <> tabelle1.id
...bringt natürlich gar nicht den gewünschten Erfolg. :-(

Die Routine muss also bei jedem ausgelesenen Datensatz aus Tabelle1 alle Einträge der Spalte Vater in Tabelle2 durchsuchen und nur wenn dort die ID aus Tabelle1 nicht auftaucht, ist der Datensatz aus Tabelle1 in dieser Suche gültig.

Wenn mir das einer nennen könnte wäre ich mal wieder sehr dankbar.

Gruß
Der Doc

Indyk
17.06.2009, 15:51:25
Hole aus Tabelle1 alle ID's und Namen, wobei die ID's nicht in Tabelle2 in der Spalte Vater auftauchen dürfen.

SELECT
id,
name
FROM
tabelle1
WHERE
id NOT IN (SELECT vater FROM tabelle2)


SELECT
id,
name
FROM
tabelle1 LEFT JOIN tabelle2 ON(tabelle1.id = tabelle2.vater)
WHERE
vater IS NULL


ungetestet

Doc_McSky
17.06.2009, 16:06:34
Oh, danke für die rasche Antwort.

Hmh, manchmal ist die Antwort so einfach und doch kommt man nicht drauf. Ich habe mich für die sehr leserliche erste Variante entschieden mit dem NOT IN und sie funktioniert prima, vielen Dank.

Die mit dem JOIN mag funktionabel sein, ist mir aber fürs menschliche Auge schon zu unübersichtlich, ich bleibe bei der ersten Form.

Danke, bis bald mal wieder

Gruß
Doc