[MySQL] Daten ohne Datensatz in Verbindungstabelle

Mahlzeit,
ich mache mal ein vereinfachtes Beispiel meines Problems:
ich habe 3 Tabellen,

  1. Person (person.id, Name)
  2. Auto (auto.id, auto)
  3. Auto zu Person (auto.id, person.id)

Inhalt Tabelle Person:
1, Hans
2, Peter
3, Michael

Inhalt Tabelle Auto:
1, Ford
2, BMW
3, Mercedes

Tabelle 3 (Auto zu Person) beinhaltet:
1,1
3,1
2,2
(Person 3 besitzt kein Auto)

Nun möchte ich mittels SQL-Abfrage alle Personen,
welche entweder kein Auto, oder einen Ford besitzen anzeigen
(Hans und Michael)
weiß aber nicht wie ich das bewerkstelligen soll.

Alternativ könnte ich noch jedem die Option „kein Auto“ zuweisen, mit einer weiteren id, fände die Lösung aber etwas unelegant.

Hat vielleicht jemand nen Tipp wie ich das Problem gelöst bekomme?

Danke und Gruß

Marcel

Moin,

ich denke ein Lösungsansatz (zwar Oracle aber die Syntax sollte unter MySql genauso funktionieren) :

SELECT p.*
FROM person p
WHERE NOT EXISTS (SELECT 1
FROM auto a
,auto_zu_person azp
WHERE a.id = azp.auto_id
AND azp.person_id = p.person_id)
OR EXISTS (SELECT 1
FROM auto a
,auto_zu_person azp
WHERE a.id = azp.auto_id
AND azp.person_id = p.person_id
AND a.automarke = ‚FORD‘)

Sicherlich kann man da auch über Outjoins ein bissl was machen, ich finde es aber so einfacher, einleuchtender und leichter verständlich.

Gruß
Andreas

grml… Formatierung wech
So, nochmal mit Formatierung … hats Forum verschluckt

SELECT p.\*
FROM person p
WHERE NOT EXISTS (SELECT 1 
 FROM auto a
 ,auto\_zu\_person azp
 WHERE a.id = azp.auto\_id
 AND azp.person\_id = p.person\_id) 
OR EXISTS (SELECT 1 
 FROM auto a
 ,auto\_zu\_person azp
 WHERE a.id = azp.auto\_id
 AND azp.person\_id = p.person\_id
 AND a.automarke = 'FORD')

gelöst, DANKE !!! Re: grml… Formatierung wech
Wow…
Hallo Andreas,
besten Dank, klappt wunderbar.
WHERE EXISTS war mit unbekannt, und dann hatte ich die ganze Zeit überlegt mit JOINs zu hantieren,
aber wie du schon geschrieben hast ist deine Lösung (für mich) verständlicher.

Gruß und nochmals besten Dank

Marcel