MySQL mit AND und OR

NoFate

Mitglied
Hallo zusammen,

ich stehe gerade wie der Ochs vorm Berg. Ich habe zwei Tabellen, die ich mittels LEFT JOIN in einer SELECT-Anfrage verbinde.

Tabelle 1 sieht wie folgt aus:

Code:
tabelle1.id (Primärschlüssel, auto_increment) | tabelle1.preis (index, double)
1|1500
2|2000
3|4500

In Tabelle 2 sind die IDs aus Tabelle 1 mit weiteren IDs aus einer dritten Tabelle verbunden:

Code:
tabelle1.id (Primärschlüssel) | tabelle3.id (Primärschlüssel)
1|3
1|4
1|5
2|1
2|3
2|4

Ich möchte nun alle IDs aus Tabelle 1 auslesen, die in Tabelle 2 mit den tabelle3.id-Werten 3 UND 4 referenziert sind:

Code:
SELECT DISTINCT tabelle1.tabelle1.id FROM tabelle 1
LEFT JOIN tabelle2 ON tabelle1.tabelle1.id = tabelle2.tabelle1.id
WHERE (tabelle2.tabelle3.id = '3')
AND (tabelle2.tabelle3.id = '4')

Das gibt aber keine Ergebnisse, meldet keinen Fehler sondern gibt einfach nur null Zeilen aus. Ich finde einfach den Fehler nicht.

Danke für Eure Hilfe

NoFate
 
tabelle2.tabelle3.id kann entweder 3 ODER 4 sein, deswegen qürde ich mit OR arbeiten, anstelle mit AND.

Aber das ist zu leicht, das hast du sicher schon ausprobiert, oder?
 
Also wenn du "nur" die Artikel aus Tabelle1 auslesen willst, die eine Relation ueber Tabelle2 mit Tabelle 3 haben, bist du mit LEFT JOIN schon aufm falschen Dampfer. LEFT JOIN gibt dir alle IDs der 'linken' Tabelle aus, auch wenn sie keinen Wert in der 'rechten' Tabelle haben. (http://www.e-mana.de/4/sql.php?p=leftjoin)

Ich versteh auch net ganz warum du vor jedem Attribut 2 Tabellen stehen hast? "tabelle1.tabelle1.id"

Und gib den Attributen (Spalten) in tabelle2 mal etwas geschicktere Namen ;)
id_tabelle1; id_tabelle2
Daher wahrscheinlich auch die 2 Tabellen namen vor den Attributen, das verwirrt (mich und vllt auch MySQL) sehr ;D

Versuch es doch mal ganz simpel so:
SELECT DISTINCT id FROM tabelle1 INNER JOIN tabelle2 ON tabelle1.id = tabelle2.id_tabelle1
 
Hi,

wenn Du nur die IDs haben willst, wozu dann überhaupt ein Join? Frag Tabelle 2 gruppiert nach tabelle1_id ab:

SQL:
SELECT tabelle1_id FROM tabelle2
   WHERE tabelle3_id = 3 OR tabelle3_id = 4
   GROUP BY tabelle1_id
   HAVING count(tabelle1_id) = 2

LG
 
Zuletzt bearbeitet von einem Moderator:
Stimmt, des 3 und 4 hab ich in meiner Loesung vergessen:

SQL:
SELECT DISTINCT id
FROM tabelle1 
INNER JOIN tabelle2
ON tabelle1.id = tabelle2.id_tabelle1
WHERE tabelle2.id_tabelle3 = 3 OR tabelle2.id_tabelle3 = 4
kuddeldaddeldu du hast zwar recht, dies liefert aber nur ein korrektes ergebnis zu seiner Frage , wenn die DB frei von Mutationsanomalien ist ;)
 
Zuletzt bearbeitet von einem Moderator:
Davon geh ich doch mal stark aus. Wenn man eine inkonsistente Datenbank hat, sollte man zuallererst das beheben. Das gibt sonst ganz andere Probleme...

LG
 

Neue Beiträge

Zurück