Kein Join falls Feld 'Null' ist

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kein Join falls Feld 'Null' ist

    Hi,

    ich hab ein kleines Problem mit einer MySQL Query. Ich möchte gerne 3 Tabellen miteinander verbinden. Das funktioniert auch sehr gut, sowohl mit JOIN als auch mit WHERE ... AND. Nun ergibt sich aber das Problem, das es vorkommen kann das ein Feld (t1.SID) NULL ist. Da dieses Feld für den JOIN in der Syntax als Vorraussetzung gilt, überspringt die Query alle Reihen in der das Feld NULL ist, da nunmal keine Zuordnung (t1.SID = t3.ID) besteht. Die Syntax im Überblick:

    PHP-Code:
    SELECT t1.Namet1.Codet2.Namet3.Name
    FROM tblCi 
    AS t1tblCo AS t2tblSt AS t3
    WHERE 
    (t1.CID t2.ID)  AND (t1.SID t3.ID)
    AND (
    t1.Name LIKE 'a%')
    ORDER BY t1.Name LIMIT 10 
    Wie kann ich nun erreichen das er im Falle dass das Feld t1.SID NULL ist keinen Join durchführt? Ich habe mir schon die Control Flow Functions in der MySQL Doku angeschaut, aber habe bisher keine Möglichkeit gefunden das Problem mit einer Query zu lösen.

    EDIT: Hier ein kleines Bild zur Verdeutlichung:



    BTW: Es gibt noch die Möglichkeit je nach Fall einen Join durchzuführen mit z.B.

    PHP-Code:
    SELECT t1.Namet1.Codet2.Namet3.Name
    FROM tblCi 
    AS t1tblCo AS t2tblSt AS t3
    WHERE 
    (t1.CID t2.ID)  AND
    CASE
             
    WHEN t1.StateID IS NULL THEN (t3.Name 'Dummy')
    ELSE
             (
    t1.SID t3.ID)
    END
    AND (t1.Name LIKE 'a%'ORDER BY t1.Name LIMIT 10 
    Diese Lösung hat aber das Problem, das man in Tabelle 3 eine Dummyreihe benötigt mit welcher dann ggf. gejoint wird. Dummerweise funktionieren Konstrukte wie diese hier nicht:

    PHP-Code:
    SELECT t1.Namet1.Codet2.Namet3.Name
    FROM tblCi 
    AS t1tblCo AS t2tblSt AS t3
    WHERE 
    (t1.CID t2.ID)  
    CASE
             
    WHEN t1.StateID IS NOT NULL THEN AND (t1.SID t3.ID)
    END
    AND (t1.Name LIKE 'a%'ORDER BY t1.Name LIMIT 10 
    Entweder ich mache hier einen Fehler bzw. MySQL unterstützt dies einfach nicht .
    Zuletzt geändert von StarShaper; 22.01.2006, 21:21.

  • #2
    Dumme Frage, aber hilft dir nicht vielleicht

    INNER JOIN

    oder WHERE blah IS NOT NULL ?

    Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
    sondern mit den Augen das Manual zu lesen.

    Kommentar


    • #3
      Original geschrieben von xManUx
      Dumme Frage, aber hilft dir nicht vielleicht

      INNER JOIN

      oder WHERE blah IS NOT NULL ?
      Mittels INNER JOIN hatte ich es bereits versucht. Das Resultat ändert sich ja dadurch nicht. INNER JOIN benötigt zum binden auch ein zugehöriges item. Das Problem liegt in der Suche. Ein Anhängen von WHERE xxx IS NOT NULL liefert eine blank page.

      Ich müsste den join quasi dann verhindern wenn das field null ist und ansonsten ganz normal joinen. Ich kenne mich mit MySQL nicht gut genug aus und weiß nicht ob/wie das möglich ist. Eventuell existiert eine elegantere Lösung als die Nutzung einer Dummy Row. Ansonsten wäre dies aber auch ok.

      Kommentar


      • #4
        Code:
        WHEN t1.StateID IS NULL THEN 1
        ?
        oder
        Code:
        WHEN t1.StateID IS NULL THEN 1 = 1
        ?
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Original geschrieben von mrhappiness
          Code:
          WHEN t1.StateID IS NULL THEN 1
          ?
          oder
          Code:
          WHEN t1.StateID IS NULL THEN 1 = 1
          ?
          Hallo mrhappiness,

          die Anweisung bewirkt ja ledeglich das immer nur der erste Eintrag ausgelesen wird. Hab das aber trotzdem mal getestet - wie erwartet...

          Kommentar


          • #6
            Ichversteh's grad nicht.

            Häng doch bitte mal einen Dump der verwendeten Tabellen an.
            Dieser Dump sollte die Daten enthalten, die deiner Grafik entsprechen.
            Dann fehlt nur noch das von dir erwartete Ergebnis.
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar

            Lädt...
            X