gondor: SQL-Anweisung ändern.

Hallo!

Aufgrund einer alten Version von MySQL kann ich keine SubSelects ausführen. Lokal habe ich eine 5.0'er Version und muss nun meine Anweisung auf eine lauffähige Version abändern. Leider habe ich schon so viel Zeit investiert, dass ich hier einfach nachfragen muss. Meine Query sieht folgend aus:

SELECT *
FROM kategories AS Kategorie, kategorielangs AS Kategorielang
WHERE Kategorie.id_kategorielang = Kategorielang.id
AND Kategorie.type = 'Auto'
AND Kategorie.id NOT
IN (
SELECT AutoKategorie.id_kategorie
FROM auto_to_kategories AS AutoKategorie
WHERE AutoKategorie.id_obj = 2
AND AutoKategorie.id_auto = 4
)

Wie sieht die Query für die 4.0'er aus?

Danke für Hilfe,

gondor(..)

  1. Hallo!

    du möchtest Sätze haben, die in der Tabelle "kategories", aber nicht in Tabelle "AutoKategorie" sind. Richtig verstanden?

    Dann kannst du mit einem JOIN arbeiten.

    Du joinst ein Feld der zweiten Tabelle dazu, das dort immer belegt ist. Wenn es keinen Satz gibt, ist dieses Feld NULL.

    Und diese Sätze musst du ausklammern.

    Lieben Gruß, Kalle

  2. SELECT *
    FROM kategories AS Kategorie, kategorielangs AS Kategorielang
    WHERE Kategorie.id_kategorielang = Kategorielang.id
    AND Kategorie.type = 'Auto'
    AND Kategorie.id NOT
    IN (
    SELECT AutoKategorie.id_kategorie
    FROM auto_to_kategories AS AutoKategorie
    WHERE AutoKategorie.id_obj = 2
    AND AutoKategorie.id_auto = 4
    )

    Wie sieht die Query für die 4.0'er aus?

    Freunde Dich mal mit ordentlichen JOINs an:

    Skizze:

      
    SELECT  
     *                                   -- Hüstel  
    FROM  
     kategories AS Kategorie             -- Hüstel  
    JOIN  
     kategorielangs AS Kategorielang     -- Hüstel  
    ON  
     (Kategorielang.id = Kategorie.id_kategorielang)  
    JOIN  
     auto_to_kategories AS AutoKategorie -- Hüstel  
    ON  
     ( <Hier muss was rein> )            -- die JOIN-Bedingung  
    WHERE  
     (Kategorie.type = 'Auto') AND  
     (AutoKategorie.id_obj = 2) AND  
     (AutoKategorie.id_auto = 4)  
    
    
  3. Mein Problem ist auf NULL-Werte zu prüfen.

    Wenn in der Tabelle AutoKategorie schon Einträge vorhanden sind, kann ich den ON( <Hier muss was rein> )  ja mit = bzw. != abfragen. Komm hier echt nicht weiter... wie kann ich alle Werte auslesen, die 'nicht' in der Tabelle sind.

    Reicht da ein einfacher JOIN oder muss ich RIGHT/LEFT JOIN benutzen?

    Please help ;-)

    gondor(..)

    1. Reicht da ein einfacher JOIN oder muss ich RIGHT/LEFT JOIN benutzen?

      Mal die JOINs ausprobieren.   ;)