SQL Bedingungen
BearT
- datenbank
1 Rouven0 Vinzenz Mai0 Rouven
0 BearT
Hi,
ich hab ein kleines Problem die gewünschten Daten aus einer Datenbank zu bekommen.
Ich habe zwei Tabellen "product_class" und "product_parent_class" die etwa so aussehen:
product_class
| ID | NAME |
product_parent_class
| ID | CLASSID | PARENTCLASS |
Eine Produktklasse soll beliebig vielen Überklassen zugeordnet werden können. Ich möchte jetzt die Produktklassen der höchsten Ebene finden, also die, die keine Überklassen mehr haben.
Ich will also die product_class.ID laden, die niemals in product_parent_class.CLASSID zu finden ist.
Auch nach viel herumprobieren hab ich keine sinnvolles SQL Statement zusammengebracht, dass mir die gewünschten Ergebnisse liefern würde.
Kann mir dabei von euch jemand helfen?
dankeschön,
BearT
Hallo,
welche Datenbank benutzt du? Bei MySQL hängt da sehr stark von ob, welche Art von Befehlen man anwenden kann.
Mein spontaner Ansatz
SELECT id, name
FROM product_class
WHERE id NOT IN (
SELECT classid FROM product_parent_class
)
-> In Worten: Gib mir aus der Tabelle product_class all diejenigen Datensätze, bei denen die ID nicht vorkommen wenn man alle classid aus der Tabelle product_parent_class abfragt.
MfG
Rouven
Hallo Rouven,
Mein spontaner Ansatz
SELECT id, name
FROM product_class
WHERE id NOT IN (
SELECT classid FROM product_parent_class
)
benötigt MySQL 4.1.x oder neuer, da erst ab dieser Version Subselects unterstützt werden. (Das wolltest Du erwähnen, ich las es zwischen Deinen Zeilen)
> -> In Worten: Gib mir aus der Tabelle product\_class all diejenigen Datensätze, bei denen die ID nicht vorkommen wenn man alle classid aus der Tabelle product\_parent\_class abfragt.
Sollte der Ausgangsposter jedoch über MySQL verfügen, aber eine ältere Version, so kann man jenem nur Deine [Einführung in Joins](http://aktuell.de.selfhtml.org/artikel/datenbanken/joins/index.htm) ans Herz legen, ein LEFT OUTER JOIN mit der Bedingung IS NULL käme mir in den Sinn.
Freundliche Grüße
Vinzenz
Hi,
Sollte der Ausgangsposter jedoch über MySQL verfügen, aber eine ältere Version, so kann man jenem nur Deine Einführung in Joins ans Herz legen, ein LEFT OUTER JOIN mit der Bedingung IS NULL käme mir in den Sinn.
Jup, korrekt, hatte vorhin mal überlegt das noch nachzuschieben. Aber ich muss zugeben, ich hab's glaub ich noch nie selbst ausprobiert...
benötigt MySQL 4.1.x oder neuer, da erst ab dieser Version Subselects unterstützt werden. (Das wolltest Du erwähnen, ich las es zwischen Deinen Zeilen)
Tut mir Leid, aber ich hab selbst noch nichtmal MySQL laufen, ich hab SOOO keine Ahnung davon, was welche Version unterstützt und verlauf mich außerdem ständig im Manual... ich muss glaub ich mal ein Wochenende üben, da Sachen drin zu finden.
Für solches Wissen hab ich dich, wenn der OP dann wieder kommt und sagt "funzt net", dann schick ich ihn zu dir, dann kannst du ihm erklären, dass sein DBMS zu alt ist ;-)
MfG
Rouven
Hallo,
welche Datenbank benutzt du? Bei MySQL hängt da sehr stark von ob, welche Art von Befehlen man anwenden kann.
Mein spontaner Ansatz
SELECT id, name
FROM product_class
WHERE id NOT IN (
SELECT classid FROM product_parent_class
)
Dankeschön, funktioniert wunderbar, hab überhaupt keine Einwände, macht genau was ich will und brauche. Vielen Dank.