Michael: Join mit zusätzlicher Bedingung

Hallo zusammen!

Ich möchte mittels JOIN zwei Tabellen miteinander verknüpfen.
Allerdings möchte ich nicht alle Werte aus Tabelle 1 mit Tabelle 2
verknüpfen, sondern nur die, die als "id_objekt" in Tabelle 1 eine "1"
eingetragen haben. Über

SELECT * FROM Tabelle_1 LEFT JOIN Tabelle_2 ON Tabelle_1.id=Tabelle_2.id

verknüpfe ich beide Tabellen. Ich bräuchte einen Ergänzung in der Form

WHERE Tabelle_1.id_objekt=1

Id_objekt ist nicht in Tabelle_2 enthalten. Ich muss JOIN verwenden,
da der Eintrag in Tabelle_2 auch NULL sein kann.

Schonmal vielen Dank für die Hilfe

  1. hi,

    SELECT * FROM Tabelle_1 LEFT JOIN Tabelle_2 ON Tabelle_1.id=Tabelle_2.id

    verknüpfe ich beide Tabellen. Ich bräuchte einen Ergänzung in der Form

    WHERE Tabelle_1.id_objekt=1

    SELECT * FROM Tabelle_1 LEFT JOIN Tabelle_2 ON Tabelle_1.id=Tabelle_2.id
    HAVING Tabelle_1.id_objekt=1

    ?

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. yo,

      SELECT * FROM Tabelle_1 LEFT JOIN Tabelle_2 ON Tabelle_1.id=Tabelle_2.id
      HAVING Tabelle_1.id_objekt=1

      HAVING wird nur in verwendung von GROUP BY verwendet und schließt datensätze aus den gruppierungen aus, wobei auch aggregat-funktionen eingesetzt werden können. ich würde die zusätzliche bedingung einfach in das JOIN kriterium mit reinnehmen.

      SELECT * FROM Tabelle_1 LEFT JOIN Tabelle_2 ON (Tabelle_1.id=Tabelle_2.id AND Tabelle_1.id_objekt=1)

      Ilja

      1. Hi,

        SELECT * FROM Tabelle_1 LEFT JOIN Tabelle_2 ON (Tabelle_1.id=Tabelle_2.id AND Tabelle_1.id_objekt=1)

        ist das performanter als der Gebrauch der guten alten WHERE-Klausel? (Schoen fuer die Augen ist es aber nicht.)

        Gruss,
        Ludger

        1. yo,

          ist das performanter als der Gebrauch der guten alten WHERE-Klausel? (Schoen fuer die Augen ist es aber nicht.)

          nicht das ich wüsste, da in aller regel alle join anweisung sowieso in die where klausel verschoben werden. manchmal muss man es in die join bedingung mit reinnehmen, wenn es sich um die zweite tabelle handelt. allerdings habe ich das so geschrieben, weil der ursprungsposter quasi ja schon das mit dem where selbst erwähnt hat. was soll man da dann noch sagen....

          Ilja

          1. Hi,

            [...] allerdings habe ich das so geschrieben, weil der ursprungsposter quasi ja schon das mit dem where selbst erwähnt hat. was soll man da dann noch sagen....

            keine Ausreden!   ;-)
            (Deine Beitraege sind sowieso "M$-verhunzt" - wie kommst Du auf die Idee, dass Grossgeschriebenes == Kleingeschriebenes gilt?)

            Dann zur Query:

            SELECT * FROM Tabelle_1 LEFT JOIN Tabelle_2 ON (Tabelle_1.id=Tabelle_2.id AND Tabelle_1.id_objekt=1)

            Hier rege ich an die sog. Keitlinghaus-Notation zu verwenden, also stattdessen

            SELECT
             *
            FROM
             Tabelle1
            LEFT JOIN
             Tabelle_2 ON (Tabelle_2.id = Tabelle_1.id)   -- man beachte den Unterschied!
            WHERE
             (Tabelle_1.id_objekt = 1)

            zu schreiben. (Wenn ich daran denke, was ich alles schon so an SQL-Code zur Bearbeitung bekommen habe. Baehhh! - Wenn einer nicht mal vernuenftigen Code "normalisieren" kann, wie wird er denn dann die Datenhaltung managen, frage ich mich immer. (Dein Code war ja noch recht schoen. ;-))

            Gruss,
            Ludger

            --
            "White space ist guut."
            1. yo,

              (Deine Beitraege sind sowieso "M$-verhunzt" - wie kommst Du auf die Idee, dass Grossgeschriebenes == Kleingeschriebenes gilt?)

              ich würde sagen, das habe ich mehr aus dem englischen. ich bin ein fan von der kleinschreibung und dazu noch ein kleiner rebell, quasi das kind im mann. regeln sind normalerweise nicht gottgegeben, sondenr von menschen aufgestellt. und brauchen tun wir letztlich beides, leute die sie einhalten und die sie brechen.

              Hier rege ich an die sog. Keitlinghaus-Notation zu verwenden, also stattdessen

              ich würde mich da an den optimierer des jweiligen dbms orientieren und der kann sehr unterschiedlich sein.

              Ilja

              1. Hi,

                ich würde sagen, das habe ich mehr aus dem englischen. ich bin ein fan von der kleinschreibung und dazu noch ein kleiner rebell, quasi das kind im mann. regeln sind normalerweise nicht gottgegeben, sondenr von menschen aufgestellt. und brauchen tun wir letztlich beides, leute die sie einhalten und die sie brechen.

                klar, Bestehendes muss immer wieder auf seine Existenzberechtigung geprueft werden. (Ist ja auch gut fuer Dich, musst Du weniger Tasten druecken. Leider nicht so gut fuer die Anderen. Rechnet sich also nicht.)

                Hier rege ich an die sog. Keitlinghaus-Notation zu verwenden, also stattdessen
                ich würde mich da an den optimierer des jweiligen dbms orientieren und der kann sehr unterschiedlich sein.

                Was oder wen meinst Du damit?

                Gruss,
                Ludger

                1. yo,

                  Ist ja auch gut fuer Dich, musst Du weniger Tasten druecken. Leider nicht so gut fuer die Anderen. Rechnet sich also nicht.

                  für mich rechnet es sich schon und alles andere ist eine sache der gewöhnung. in england klappt es jau auch und die würden sich wundern, wenn man nun auf einmal vieles gross schreiben würde. ist also alles nur eine frage der perspektive.

                  Was oder wen meinst Du damit?

                  den optimierer meine ich.

                  Ilja

                  1. Hi,

                    Was oder wen meinst Du damit?

                    den optimierer meine ich.

                    der (weisungsbefugte?) Optimierer des jeweiligen RDBMS, an dem Du i.p. Datenzugriff mitmischt? - Ich kenne diese Rolle nicht, ist das vielleicht einfach "der Chef"?   ;-)

                    Gruss,
                    Ludger

                    --
                    "Die SPD im Aufwind?"
                    1. Hallo Ludger,

                      Was oder wen meinst Du damit?

                      den optimierer meine ich.

                      der (weisungsbefugte?) Optimierer des jeweiligen RDBMS, an dem Du i.p. Datenzugriff
                      mitmischt? - Ich kenne diese Rolle nicht, ist das vielleicht einfach "der Chef"?   ;-)

                      Eine Query durchlaeuft (wie jede Sprache bei jedem Interpreter -- naja, gut, fast jede
                      Sprache bei fast jedem Interpreter) verschiedene Phasen. Eine davon ist das “Optimizing“,
                      und das Code-Stueck, das die Optimierungen durchfuehrt, wird “Optimizer” oder halt
                      “Optimierer” genannt.

                      Grüße,
                       CK

                      --
                      Wer sich zu überschwänglich freut, wir später Grund zum Weinen haben.
                      http://wwwtech.de/
                      1. Hi,

                        Eine Query durchlaeuft (wie jede Sprache bei jedem Interpreter -- naja, gut, fast jede
                        Sprache bei fast jedem Interpreter) verschiedene Phasen. Eine davon ist das “Optimizing“,
                        und das Code-Stueck, das die Optimierungen durchfuehrt, wird “Optimizer” oder halt
                        “Optimierer” genannt.

                        und wie heisst der "Optimierer" von M$ SQL Server und was hat das mit der Notation von SQL-Statements zu tun?

                        Gruss,
                        Ludger

                        --
                        "Die SPD im Aufwind?"
                        1. Hallo Ludger,

                          Eine Query durchlaeuft (wie jede Sprache bei jedem Interpreter -- naja, gut, fast jede
                          Sprache bei fast jedem Interpreter) verschiedene Phasen. Eine davon ist das “Optimizing“,
                          und das Code-Stueck, das die Optimierungen durchfuehrt, wird “Optimizer” oder halt
                          “Optimierer” genannt.

                          und wie heisst der "Optimierer" von M$ SQL Server [...]

                          “Optimierer” oder auch “Optimizer”.

                          [...] und was hat das mit der Notation von SQL-Statements zu tun?

                          Abhaengig von der Notation koennen sich die Ausfuehrungsplaene gewaltig aendern und damit
                          auch die Moeglichkeiten des Optimizers zu optimieren.

                          Grüße,
                           CK

                          --
                          Microsoft: Where do you want to go today?
                          Linux: Where do you want to go tomorrow?
                          FreeBSD: Are you guys coming, or what?
                          http://wwwtech.de/
                          1. Hi,

                            und wie heisst der "Optimierer" von M$ SQL Server [...]

                            “Optimierer” oder auch “Optimizer”.

                            ich kenne nur diese Geschichte mit den Ausfuehrungsplaenen, denen ich nicht besonders traue, beim Query Analyzer. Aber Du meinst was anderes, oder?

                            [...] und was hat das mit der Notation von SQL-Statements zu tun?

                            Abhaengig von der Notation koennen sich die Ausfuehrungsplaene gewaltig aendern und damit
                            auch die Moeglichkeiten des Optimizers zu optimieren.

                            Was verstehst Du unter Notation?

                            Gruss,
                            Ludger

                            --
                            "Die SPD im Aufwind?"
                            1. Hallo Ludger,

                              und wie heisst der "Optimierer" von M$ SQL Server [...]

                              “Optimierer” oder auch “Optimizer”.

                              ich kenne nur diese Geschichte mit den Ausfuehrungsplaenen, denen ich nicht besonders
                              traue, beim Query Analyzer. Aber Du meinst was anderes, oder?

                              Ja, ich meine etwas anderes. Der Optimizer hat die Aufgabe, die Ausfuehrungsplaene zu
                              optimieren. Der Optimizer wuerde z. B. in jedem Fall ein »WHERE 1 = 1« wegoptimieren.
                              Oder auch die Reihenfolge von Joins zu bestimmen (die ja fuer die Performance recht
                              massgeblich ist) gehoert zu seinen Aufgaben.

                              [...] und was hat das mit der Notation von SQL-Statements zu tun?

                              Abhaengig von der Notation koennen sich die Ausfuehrungsplaene gewaltig aendern und damit
                              auch die Moeglichkeiten des Optimizers zu optimieren.

                              Was verstehst Du unter Notation?

                              In dem Fall: die verschiedenen Moeglichkeiten, mit verschiedenen Queries das gleiche
                              Resultset zu bekommen.

                              Grüße,
                               CK

                              --
                              Beware Evildoers for my deed is done and every little damsel in distress will be shelted!
                              http://wwwtech.de/
                              1. Hi,

                                Ja, ich meine etwas anderes. Der Optimizer hat die Aufgabe, die Ausfuehrungsplaene zu
                                optimieren. Der Optimizer wuerde z. B. in jedem Fall ein »WHERE 1 = 1« wegoptimieren.
                                Oder auch die Reihenfolge von Joins zu bestimmen (die ja fuer die Performance recht
                                massgeblich ist) gehoert zu seinen Aufgaben.

                                wenn Du mir jetzt noch verraten koenntest was ilja (moeglicherweise ;-) gemeint hat?

                                Gruss,
                                Ludger

                                --
                                "Die SPD im Aufwind?"
                                1. Hallo Ludger,

                                  Ja, ich meine etwas anderes. Der Optimizer hat die Aufgabe, die Ausfuehrungsplaene zu
                                  optimieren. Der Optimizer wuerde z. B. in jedem Fall ein »WHERE 1 = 1« wegoptimieren.
                                  Oder auch die Reihenfolge von Joins zu bestimmen (die ja fuer die Performance recht
                                  massgeblich ist) gehoert zu seinen Aufgaben.

                                  wenn Du mir jetzt noch verraten koenntest was ilja (moeglicherweise ;-) gemeint hat?

                                  Er sagte, dass er die genaue Notation vom DBMS und seinem Optimizer abhaengig machen wuerde.

                                  Grüße,
                                   CK

                                  --
                                  Nur die Weisesten und die Dümmsten können sich nicht ändern.
                                  http://wwwtech.de/