Hello,
Und meine Frage: Wie um Gottes Willen kommt man denn darauf? Ein alternativer Lösungsvorschlag mit NOT EXISTS und NOT IN ist auch noch angegeben, aber auf den bin ich ebensowenig gekommen.
Routine! Wie bei so vielem im Softwareumfeld, einfach Erfahrung und ein Auge dafür. In SQL führen immer viele Wege ans Ziel, wenn man etwas Erfahrung gewinnt findet man zumindest einen, wenn man viel Erfahrung hat eröffnen sich Spielräume und man kann Lösungen vergleichen.
Wie Frank schon angemerkt hast, mit ALL oder ANY solltest du ebenso schnell an dein Ziel kommen, aber das ist abhängig von der Datenbank. Für den Augenblick reicht es sich zu überlegen: Was macht denn "Alle Lieferanten" aus. Wenn wir davon ausgehen, dass die Datenbank "alle" nicht unterstützt, dann bleibt uns nur übrig mal danach zu gucken ob sie das Gegenteil unterstützt, also "keinen". OK, also mit dem Wissen, dass es NOT EXISTS gibt (EXISTS für alle reicht ja nicht, das ist ja nur ein "es gibt mind. einen") brauchen wir nun noch die rein logische und SQL-unabhängige Frage zu beantworten, wie man denn "alle Lieferanten" mit Hilfe von "existiert nicht" bauen können. Na ja, OK, also wir wollen alle Kunden, bei denen alle Lieferanten vertreten sind. D.h. wir wollen alle Kunden, bei denen es keinen Lieferanten gibt, der nicht vertreten ist. Und das können wir schreiben, genau das steht in deinem Statement.
Klingt trivial und trotzdem kommt man nicht drauf. Für eine Klausur eine unbefriedigende Lösung, aber leider braucht man wirklich Routine...
MfG
Rouven
-------------------
Computer programming is tremendous fun. Like music, it is a skill that derives from an unknown blend of innate talent and constant practice. Like drawing, it can be shaped to a variety of ends: commercial, artistic, and pure entertainment. Programmers have a well-deserved reputation for working long hours but are rarely credited with being driven by creative fevers. Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination, but because their imagination reveals worlds that others cannot see. -- Larry OBrien and Bruce Eckel in Thinking in C#