DonStefano: MySQL - 2 Tabellen verbinden (JOIN) - aber nur bestimmte Inhalte

Hallo zusammen,

ich habe ein Problem mit dem "Join-Befehl" in MySQl.

Ich habe 2 Tabellen, die über eine ID miteinander in Bezug stehen. Diese möchte ich miteinander verbinden, da ich in PhpMyAdmin Daten aus beiden Tabellen in einer Tabelle benötige um diese zu exportieren.

Soweit kein Problem: Im SQL-Prompt verbinde ich die beiden Tabellen folgendermaßen:

+++++++++++++++++++++++++++++++++
 SELECT *,t1.userid,t2.userid
FROM tabelle1 t1 INNER JOIN tabelle2 t2
USING (userid)
+++++++++++++++++++++++++++++++++

Somit habe ich ALLE Datensätze der beiden Tabellen in einer Ausgabe. Das ist aber nicht das, was ich brauche.

Ich möchte NUR diejenigen Daten aus Tabelle2 mit Tabelle1 verknüpfen, die in Tabelle2 in einer bestimmten Spalte (spalteX) den Wert 1,2,3 oder 4 haben.

Das habe ich nun u.a. folgendermaßen versucht:

++++++++++++++++++++++++++++++++++++++++
 SELECT *,t1.userid,t2.userid
FROM tabelle1 t1 INNER JOIN tabelle2 t2
WHERE t2.spalteX = 1
OR t2.spalteX = 2
OR t2.spalteX = 3
OR t2.spalteX = 4
USING (besitzerid)
++++++++++++++++++++++++++++++++++++++++

Das verursacht aber (wie viele meiner anderen Versuche) Fehlermeldungen, die ich euch erspare, da (hoffentlich) jemand auch so erkennt, was ich da falsch mache...

Für Hilfe wäre ich euch sehr verbunden, da ich es einfach nicht hinbekomme.
Vielen Dank!
Don

  1. Hello,

    ++++++++++++++++++++++++++++++++++++++++
    SELECT *,t1.userid,t2.userid
    FROM tabelle1 t1 INNER JOIN tabelle2 t2
    WHERE t2.spalteX = 1
    OR t2.spalteX = 2
    OR t2.spalteX = 3
    OR t2.spalteX = 4
    USING (besitzerid)
    ++++++++++++++++++++++++++++++++++++++++

    Du vermischst hier zwei Sachverhalte: Syntaktisch hast du 1x den Join, der aus JOIN und Kriterium (hier: USING) besteht, zweitens hast du eine Reihe von WHERE-Beschränkungen.
    Dein syntaktischer Fehler liegt darin, dass du das WHERE mitten in den Join gezwängt hast. Es gibt mal mindestens 3 Auswege:

    1. Lass den Join unangetastet, füge das WHERE am Ende ein: FROM x JOIN y USING...WHERE...
    2. Führe ein Subselect aus FROM x JOIN (SELECT ... FROM  y WHERE) y_neu USING
    3. Verzichte auf USING, nutze ON und verlagere die Kriterien dahin: FROM x JOIN y ON x.benutzerid = y.benutzerid AND (...{WHERE-Kriterien}...)

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    There's no such thing as a free lunch  --  Milton Friedman