dedlfix: SQL: IF funktioniert nicht

Beitrag lesen

Hi!

FROM und JOIN liefern dir alles, aber das WHERE schließt einiges aus. Wenn du Elter und Kinder haben möchtest, musst du das im WHERE berücksichtigen, dann bekommst du einen Datensatz mehr geliefert. Solange WHERE keine Datensätze für die Ergebnismenge liefert, kannst du auch keine Daten hinzufügen - sprich: wirst du die ID nicht bekommen.

Wie mache ich das denn in diesem Fall?

Deine WHERE-Klausel sieht momentan so aus, dass du von KategorieX die Kinder des nächsten Levels abfragst. Von denen willst du den categoryname haben. KategorieX selbst ist nicht in der Abfrage berücksichtigt, ist kein Teil des Ergebnisses. So soll es eigentlich sein. Nun willst du, wenn KategorieX keine Kinder hat, die Abfrage keine Ergebnisse liefert, plötzlich doch die KategorieX enthalten haben. Das widerspricht sich. Von nichts kann man nichts selektieren. Du kannst entweder nur KategorieX ständig mit in das Ergebnis aufnehmen und hast im Kinderfall das Problem sie von den Kindern unterscheiden zu müssen, oder du suchst dir einen anderen Weg der Erkennung.

Die Ergebnismenge ständig um einen Elter-Datensatz zu erweitern sollte nicht das Problem sein. Die WHERE-Klausel kann dazu um OR node1.level = node2.level erweitert werden. Das IF() kann anhand des Levels zwischen Elter und Kindern unterscheiden. In der Auswertelogik musst du nun zusätzlich berücksichtigen: Wenn mehr als ein Datensatz in der Ergebnismenge ist, dann muss der Elterdatensatz ignoriert werden.

Bereits im DBMS das Elter fallabhängig einzubauen geht nicht mit einer simplen Abfrage. Da müsstest du mit einer Stored Procedure zu Werke gehen oder ein recht komplexes JOIN hinzufügen. Das darf sich nur hinzufügen, wenn keine Kinder in der Ergebnismenge sind, wozu es die erst einmal für sich selbst aufbauen muss. Da siehst du am Ende keiner mehr durch.

Lo!