Tach zusammen!
Kenne mich Dank MySQL mit Subselects nicht wirklich aus, verstehe ich das richtig: Du willst alle Datensätze aus der kunde, die in der Spalte artikelnr eine Nummer enthalten die in der Tabelle artikel vorkommt, oder?
Also, diese Abfrage ist ein Gebilde, was aus der Idee entstanden ist, die Divison der relationalen Algebra (siehe Thread von mir etwas weiter unten) in SQL umzusetzen. Die Loesung hier ist von nem Bekannten, der meint, "das muesse so funktionieren" *g*.
Was soll sie also machen: Gebe mir eine Liste derjenigen Kunden zurueck, die schonmal jegliche Artikel gekauft haben.
Das hier die Relation kunde heisst und nicht lieferung ist einfach ein Versehen, also eigentlich ist natuerlich lieferung als Name der Relation bedeutend richtiger.
In kunde (aka lieferung) stehen zwei Attribute Kundennr und Artikelnr und in artikel stehen auch zwei Attribute, naemlich Artikelnr und Beschreibung (letztere ist aber uninteressant).
Intuitiv ist artikel eine Liste aller liferbaren Artikel und kunde (aka lieferung) eine Liste, die beschreibt, welcher Kunde, welche Artikel bekommen hat (in der Realitaet sollte natuerlich lieferung auch noch Attribute wie Datum, Anzahl etc. haben, die hier aber irrelevant sind).
Dann würde ich das mit einem LEFT JOIN machen
SELECT t1.kundennr
FROM kunde AS t1
LEFT JOIN artikel AS t2
ON t1.artikelnr = t2.artikelnr
WHERE t2.artikelnr IS NOT NULL
Obwohl ich nicht der Held in SQL bin, meine ich feststellen zu koennen, dass o.a. Statement dies also nicht liefert.
Mein Statement nochmal:
SELECT kundennr FROM kunde WHERE artikelnr ALL (SELECT DISTINCT artikelnr FROM artikel)
Der Subselect gibt nur eine Liste aller Artikelnr zurueck. ich suche jetzt also diejenigen Kundennr in kunde (aka lieferung), wo alle Artikelnr schon nebenstehen (also nicht auf einmal, sondern im Laufe der Relation) :-)
Ich hoffe, ich habe das Problem jetzt soweit und so verstaendlich wie moeglich beschrieben (ich bin nicht so gut im aufschreiben von sowas *g*).
Gruss,
Marc