JOIN
Markus
- datenbank
0 Frank (no reg)0 Markus
Hallo...
ich möchte aus aus einer Datenmenge ermitteln welcher Eintrag von Nutzer X noch nicht ausgewählt wurde. Dafür hab ich eine 2 Tabelle erstellt, in der gespeichert wird welcher Eintrag aus Tabelle 1 schon vom Benutzer gewählt wurde.
Aber.. wo ist mein Fehler?
tabelle1
+--------+--------+-------+
|id |name |count |
+--------+--------+-------+
|1 |Hans |0 |
|2 |Bert |12 |
|3 |Fritz |4 |
|4 |Karl |3 |
tabelle2
+--------+--------+
|id |v_id |
+--------+--------+
|1 |V1 |
|1 |V2 |
|3 |V1 |
|4 |V1 |
SELECT
id, name, count
FROM
tabelle1
LEFT JOIN
tabelle2
ON
tabelle1.id = tabelle2.id AND tabelle2.v_id != 'V1'
GROUP BY
tabelle1.id
LIMIT 0,1
dieses query erzielt nicht das von mir gewünschte Ergebnis :-/
Ich hoffe ich hab mich einigermaßen verständlich ausgedrückt, wenn nicht - bitte nachfragen!
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
Ja, stimmt alles!
Das IS NULL war ein guter Tip! Danke!
Habe das query nun angepasst und es bringt das gewünschte Resultat!
Schönen Dank!