Marcel: Probleme mit JOIN Statement

Hallo

In einer DB existieren zwei Tabellen. Beide verfügen über denselben Schlüssel anhand welchem die Datensätze einander zugeordnet werden können. Keine der Tabellen ist "führend" und es ist möglich, dass es Zustände geben kann in welchem einmal die linke und einmal die rechte Tabelle über mehr Datensätze verfügt (d.h. die linke Tabelle verfügt über Schlüssel die in der rechten nicht vorkommen und umgekehrt).

Wenn ich nun die beiden Tabellen mit einem INNER JOIN Statement zusammenfüge, dann verliere ich Datensätze. Ein LEFT JOIN/RIGHT JOIN hilft auch nichts, weil ich allenfalls Daten aus der rechten/linken Tabelle verliere. Wie muss ich es anstellen, damit ich alle Datensätze erhalte, welche einen übereinstimmenden Schlüssel haben und zusätzlich alle Datensätze angefügt erhalte, welche in einer der beiden Tabellen vorkommen?

Gruss
Marcel

  1. Hallo

    [...] es ist möglich, dass es Zustände geben kann in welchem einmal die linke und einmal die rechte Tabelle über mehr Datensätze verfügt (d.h. die linke Tabelle verfügt über Schlüssel die in der rechten nicht vorkommen und umgekehrt).

    Wenn ich nun die beiden Tabellen mit einem INNER JOIN Statement zusammenfüge, dann verliere ich Datensätze. Ein LEFT JOIN/RIGHT JOIN hilft auch nichts, weil ich allenfalls Daten aus der rechten/linken Tabelle verliere. Wie muss ich es anstellen, damit ich alle Datensätze erhalte, welche einen übereinstimmenden Schlüssel haben und zusätzlich alle Datensätze angefügt erhalte, welche in einer der beiden Tabellen vorkommen?

    Du benötigst den FULL OUTER JOIN. Entnehme bitte der Dokumentation Deines Datenbankmanagementsystems, ob dieses den FULL OUTER JOIN unterstützt. MySQL gehört derzeit nicht dazu.

    Freundliche Grüße

    Vinzenz

    1. Hallo,

      Du benötigst den FULL OUTER JOIN. Entnehme bitte der Dokumentation Deines Datenbankmanagementsystems, ob dieses den FULL OUTER JOIN unterstützt. MySQL gehört derzeit nicht dazu.

      MS Access auch nicht. Man kann aber mit LEFT JOIN, RIGHT JOIN und UNION einen nachbauen.

      Beispiel:

      Tabelle1
      id  feld1
      1   a
      2   b
      3   c

      Tabelle2
      id  feld1
      1   a
      2   b
      4   d

      SELECT [tabelle1].[id], [Tabelle1].[feld1], [tabelle2].[id], [Tabelle2].[feld1]
      FROM Tabelle1 LEFT JOIN Tabelle2 ON [Tabelle1].[id]=[Tabelle2].[id]
      UNION
      SELECT [tabelle1].[id], [Tabelle1].[feld1], [tabelle2].[id], [Tabelle2].[feld1]
      FROM Tabelle1 RIGHT JOIN Tabelle2 ON [Tabelle1].[id]=[Tabelle2].[id];

      Tabelle1.id  Tabelle1.feld1  Tabelle2.id  Tabelle2.feld1
                                   4            d
      1            a               1            a
      2            b               2            b
      3            c

      viele Grüße

      Axel

      1. Hallo Axel,

        Du benötigst den FULL OUTER JOIN. Entnehme bitte der Dokumentation Deines Datenbankmanagementsystems, ob dieses den FULL OUTER JOIN unterstützt. MySQL gehört derzeit nicht dazu.
        MS Access auch nicht. Man kann aber mit LEFT JOIN, RIGHT JOIN und UNION einen nachbauen.

        ich weiß, deswegen konnte ich dieses Konstrukt letztens Kalle nicht vorschlagen. Er hätte den FULL OUTER JOIN unter MySQL 3.23.5x benötigt. *g*

        Freundliche Grüße

        Vinzenz

        1. Hallo,

          Man kann aber mit LEFT JOIN, RIGHT JOIN und UNION einen nachbauen.
          ich weiß, deswegen konnte ich dieses Konstrukt letztens Kalle nicht vorschlagen. Er hätte den FULL OUTER JOIN unter MySQL 3.23.5x benötigt. *g*

          Ja, ohne UNION kein FULL JOINing, wie im richtigen Leben ;-).

          viele Grüße

          Axel

      2. Hallo!

        Vielen Dank für die Hilfe, das hat geholfen!

        Gruss Daniel