Klara: Datensätze anzeigen, die in der anderen Tabelle nicht vorkommen

Hi selfer

ich habe 2 Tabellen, die ich nicht ändern kann

+-----------+ +-----------+
| tabelle 1 | | tabelle 2 |
+-----------+ +-----------+
| id        | | id        |
+-----------+ +-----------+
| ...       | | t1_id     |
+-----------+ +-----------+

ich möchte alle IDs (t1_id) erhalten, die in der Tabelle 1 nicht vorhanden sind

Einführung in Joins habe ich mir schon durchgelesen - finde jedoch keinen Ansatz

Klara

  1. Hi selfer

    ich habe 2 Tabellen, die ich nicht ändern kann

    +-----------+ +-----------+
    | tabelle_1 | | tabelle_2 |
    +-----------+ +-----------+
    | id        | | id        |
    +-----------+ +-----------+
    | ...       | | t1_id     |
    +-----------+ +-----------+

    ich möchte alle IDs (t1_id) erhalten, die in der Tabelle 1 nicht vorhanden sind

    mit
    [code lang=sql]SELECT *
    FROM tabelle_1 t1
    RIGHT OUTER JOIN tabelle_2 t2 ON t2.t1_id = t1.id
    erhalte ich die ID, die in beiden Tabellen vorkommen, bei Datensätze, die in Tabelle 1 nicht vorkommen, erhalte ich in jeder Spalte NULL.

    wie kann ich das Ergebnis umkehren?

    Klara

  2. Hello,

    welches Datenbanksystem verwendest du denn? Je nach DBMS können unterschiedliche Features eingesetzt werden.
    Ein Ansatz, der relativ einleuchtend ist, ist der Problembeschreibung zu folgen:
    SELECT t1_id
    FROM tabelle2
    WHERE t1_id NOT IN (
       SELECT id FROM tabelle1
    )
    -> lies: gib mir alle t1_id aus tabelle2, für die t1_id kein Vorkommen in der Menge der id aus tabelle1 hat.

    Die etwas umständlichere, aber dafür z.B. von älteren MySQL-Versionen unterstützte, Variante nutzt einen LEFT JOIN (siehe der von dir verlinkte Artikel) und filtert auf Datensätze für die es _keine_ Übereinstimmung gibt:
    SELECT t2.t1_id, t1.id
    FROM tabelle2 t2 LEFT JOIN tabelle1 t1
    ON t2.t1_id = t1.id
    WHERE t1.id IS NULL

    ->lies: führe tabelle2 und tabelle1 sofern möglich über die t1_id=id zusammen und filtere hinterher per WHERE auf all diejenigen Sätze, bei denen keine paarweise Übereinstimmung zustande gekommen ist (NULL-Wert)

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Wenn du die Nadel im Heuhaufen nicht findest, zünde den Heuhaufen an.
  3. echo $begrüßung;

    ich möchte alle IDs (t1_id) erhalten, die in der Tabelle 1 nicht vorhanden sind
    Einführung in Joins habe ich mir schon durchgelesen - finde jedoch keinen Ansatz

    Die Tabellen so zu verknüpfen, dass du alle verknüpften Daten bekommst, kannst du?
    Die Tabellen so zu verknüpfen, dass du auch die Datensätze bekommst, die keine Verknüpfung zur anderen Tabelle haben, kannst du? Für Datensätze, die in der anderen Tabelle nicht vorkommen, steht in deren Feldern NULL, so wie es beim LEFT JOIN beschrieben steht.

    echo "$verabschiedung $name";