Mahlzeit,
ich mache mal ein vereinfachtes Beispiel meines Problems:
ich habe 3 Tabellen,
- Person (person.id, Name)
- Auto (auto.id, auto)
- 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