Frank (no reg): JOIN

Beitrag lesen

Hallo,

du möchstest alle Datensätze aus Tabelle1, deren Id nicht in Tabelle2 auftaucht? Wenn ich dich da falsch verstehe, erkläre dich bitte besser. Z.b. die Rolle von "Eintrag" is schwammig. Oder schreibe einfach, was du gern als Ergebnis gehabt hättest.

Wenn meine Annahme stimmt, dann ...

Variante 1) Du kannst dann logischerweise nur mit dem Feld den Join machen, der beide Tabellen verbindet, also "id". Ein LEFT JOIN ergibt folgende Menge

+--------+--------+-------+--------+--------+
|id      |name    |count  |id      |v_id    |
+--------+--------+-------+--------+--------+
|1       |Hans    |0      |1       |V1      |
|1       |Hans    |0      |1       |V2      |
|2       |Bert    |12     |NULL    |NULL    |
|3       |Fritz   |4      |3       |V1      |
|4       |Karl    |3      |4       |V1      |

Mit der zusätzlichen Einschränkung tabelle2.id IS NULL bleibt von der Gesamtmenge nur noch Id 2 (Bert) übrig.

Passendes SQL:

  
SELECT  
 id, name, count  
FROM  
 tabelle1  
LEFT JOIN  
 tabelle2  
ON  
 tabelle1.id = tabelle2.id  
WHERE tabelle2.id IS NULL  
GROUP BY  
 tabelle1.id, tabelle1.name, tabelle1.count  
LIMIT 0,1  

Variante 2) wahrschweinlich einfacher

Verbal: Gib mir alle Ids aus Tabelle die nicht in Tabelle2 auftauchen.

Vorausgesetzt dein Datenbanksystem (ich tippe auf mySQL wegen der verhunzten Verwendung von GROUP BY) unterstützt "subqueries"/Unterabfragen ...

  
SELECT  
 id, name, count  
FROM  
 tabelle1  
WHERE tabelle1.id NOT IN             -- IN ist ein Operator  
      (SELECT  
         DISTINCT id  
       FROM  
         tabelle2)  

HTH, Ciao, Frank