Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

select auf leere felder nach left join

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von NeoPrince, 21 September 2012.

  1. NeoPrince

    NeoPrince Aktiver Benutzer

    Hi zusammen
    ich habe folgende anforderung bei einer Datenbankabfrage:
    • 2 Tabellen 1:Eigenschaften 2:Eigenschaften_Kategorie.
    • In der Eigenschaften Kategorie wir die ID einer Eigenschaft einer Kategorie zugewiesen.
    • es ist möglich dass Eigenschaften in keiner Kategorie zugewiesen sind.
    wenn ich nun alle eigenschaften einer bestimmten Kategorie sehen möchte mache ich das mit folgender Abfrage:

    Code:
    select   
    Eigenschaften.eigenschaft as eigenschaft,
    Eigenschaften.id as eigenschaft_id,
    Eigenschaften_Kategorie.kategorie as kategorie_id                   
                       
    from Eigenschaften               
                       
    right join Eigenschaften_Kategorie on
    Eigenschaften_Kategorie.eigenschaft=Eigenschaften.id
                       
    Where Eigenschaften_Kategorie.kategorie=KATEGORIEID
    Funktioniert wunderbar.
    Möchte ich alle Eigenschaften die nicht in einer bestimmten Kategorie sind, macht mein Script einfach != in der WHERE. Dann bekomme ich aber nur die, die schon irgendeiner anderen Kategorie zugeordnet sind.
    Die, die noch keiner Kategorie zugeordnet sind ergeben bei einer Abfrage ohne das Where in der Spalte Kategorie_ID ein NULL.

    Wie bekomme ich auch die mit NULL. oder habe ich einen föllig falschen Ansatz?
    Die genaue SQL Server version kenne ich leider nicht

    Danke im vorraus Gruß Neo
     
  2. ukulele

    ukulele Datenbank-Guru

    Zunächst mal musst du deinen RIGHT JOIN in einen LEFT JOIN ändern um ohne eine WHERE Bedingung auch alle Datensätze zu bekommen und dann ergänzen wir !=KATEGORIEID noch etwas.
    Code:
    select 
    Eigenschaften.eigenschaft as eigenschaft,
    Eigenschaften.id as eigenschaft_id,
    Eigenschaften_Kategorie.kategorie as kategorie_id                 
                     
    from Eigenschaften             
                     
    LEFT join Eigenschaften_Kategorie on
    Eigenschaften_Kategorie.eigenschaft=Eigenschaften.id
                     
    Where Eigenschaften_Kategorie.kategorie!=KATEGORIEID
    OR        Eigenschaften_Kategorie.kategorie IS NULL
     
  3. NeoPrince

    NeoPrince Aktiver Benutzer

    Oh neeein

    Das mit dem right hatte ich nur falsch kopiert. ich hatte schon left.
    Aber dass ich nur noch mit OR ein NULL dranhängen muss, da hätte ich auch selber drauf kommen können.

    Vielen Dank für die Schnelle Hilfe

    gruß Neo

    PS: Warum zur hölle ist NULL nicht (nicht 2) wobei 2 hier die KATEGORIEID ist...
     
  4. ukulele

    ukulele Datenbank-Guru

    NULL ist halt ein eigener Zustand :)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden