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

LEFT JOIN als SQL Query ohne JOIN

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von foobarbaz, 19 Februar 2017.

  1. foobarbaz

    foobarbaz Neuer Benutzer

    Hey Leute!

    Ich wollte mal fragen, wie man einen LEFT JOIN simulieren kann, ohne einen JOIN zu benutzen.
    Ich arbeite mit der Testdatenbank von w3schools SQL Tryit Editor v1.5

    Ich versuche folgenden SQL Befehl mit einem JOIN:

    FROM Customers
    LEFT JOIN Orders
    ON Customers.CustomerID=Orders.CustomerID
    ORDER BY Customers.CustomerName;

    Durch einen SELECT Befehl ohne JOIN zu simulieren. Zur Zeit kriege ich es nur hin den INNER JOIN zu simulieren, also die Schnittmenge beider Tabellen zu bekommen:

    SELECT Customers.CustomerName, Orders.OrderID
    FROM Customers, Orders
    WHERE Customers.CustomerID=Orders.CustomerID
    ORDER BY CustomerName;

    Hilfe wäre mega super!
     
    Zuletzt bearbeitet: 19 Februar 2017
  2. drdimitri

    drdimitri Datenbank-Guru

    Einen Join kann man nicht simulieren. Du simulierst auch keinen Join, du verwendest nur eine andere Schreibweise.
     
  3. foobarbaz

    foobarbaz Neuer Benutzer

    Es ist ohne JOIN nicht möglich die Funktionalität eines LEFT JOINS zu bekommen???
     
  4. drdimitri

    drdimitri Datenbank-Guru

    Nein, wieso sollte man zwei Befehle für die gleiche Sache implementieren.
    Das gleiche gilt auch für einen inner join.
     
  5. ukulele

    ukulele Datenbank-Guru

    Anders gesagt: Dein Select ist auch ohne das Schlüsselwort JOIN per Definition ein Join. Technisch wird die Datenbank das auch im Hintergrund als Join behandeln, es steht halt nur nicht explizit in der Syntax.

    Um einen LEFT JOIN durchzuführen ohne JOIN als Syntax zu verwenden müsstest du einen INNER JOIN verwenden wie in deinem schon genannten Beispiel und den Rest mit UNION ALL dran basteln:
    Code:
    SELECT Customers.CustomerName, Orders.OrderID
    FROM Customers, Orders
    WHERE Customers.CustomerID=Orders.CustomerID
    UNION ALL
    SELECT Customers.CustomerName, NULL AS OrderID
    FROM Customers
    WHERE Customers.CustomerID NOT IN ( SELECT Orders.CustomerID FROM Orders )
    
    Die ganze Sache hat allerdings keinen Mehrwert.
     
  6. drdimitri

    drdimitri Datenbank-Guru

    Und ist nebenbei nicht identisch mit einem LEFT JOIN. Sobald das Feld CustomerID in einer einzigen Zeile den Wert NULL hat, ist das komplette Ergebnis NULL.
     
  7. ukulele

    ukulele Datenbank-Guru

    Es entspricht aber einem INNER JOIN + den zusätzlichen Select.
    Korrekt, ließe sich aber abfangen, ich wollte es nur nicht zu kompliziert machen. Alternativ kann man auch mit NOT EXISTS arbeiten, dann joint man aber schon wieder im Subselect.

    Die Frage ist was soll hier erreicht / gewonnen werden.
     
  8. drdimitri

    drdimitri Datenbank-Guru

    Das würde mich auch interessieren, vielleicht äußert sich foobarbaz noch dazu.
     
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