BearT: SQL Bedingungen

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

  1. 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

    --
    -------------------
    Let Bygones Be Bygones  --  Robert Pitscottie: "Chronicles of Scotland"
    1. 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
      
      1. 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

        --
        -------------------
        Let Bygones Be Bygones  --  Robert Pitscottie: "Chronicles of Scotland"
    2. 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.