Hi,
ich habe 2 Tabellen, die 1. Tabelle enthält bspw. Name und Kontaktdaten von Personen, die 2. Tabelle alle Urlaubsziele, die eine Person bereits besucht hat.
Eine Abfrage, für alle Personen aus Hamburg und die bereits Paris besucht haben, funktioniert prächtig:
select p.*,z.* from personen as p left join ziele as z on p.idnr=z.pidnr where p.ort like '%Hamburg%' AND z.ziel like '%Paris%'
Es gibt Ortsnamen, die Teil eines anderen Ortsnamen sind, die Abfrage nach z.B. '%York%' wird also nicht nur die Besucher der nord-englischen Stadt York treffen, sondern auch die der US-amerikanischen Stadt New York.
Aber wenn ich jetzt alle Personen aus Hamburg wissen möchte, die noch NICHT in Paris waren, funktioniert z.B. die Abfrage nicht korrekt:
select p.*,z.* from personen as p left join ziele as z on p.idnr=z.pidnr where p.ort like '%Hamburg%' AND z.ziel not like '%Paris%'
Natürlich nicht, für jeden Hamburger, der bereits eine Stadt besucht hat, auf die not like '%Paris%'
zutrifft, wird trotzdem gefunden.
Da müßte mit einem Konstrukt wie not exists(... z.ziel = 'Paris')
gesucht werden.
cu,
Andreas a/k/a MudGuard