MySQL: Problem mit AND-Abfrage

NoFate

Mitglied
Hallo,

habe ein Problem beim Auslesen von drei Tabellen innerhalb einer Datenbank.

TABLE_1 enthällt Objekte, deren ID ich benötige.
TABLE_2 enthält Objekte, die ich auch mehrfach denen in TABLE_1 zugeordnet habe.
TABLE_3 ist die Zuordnungstabelle, in der die IDs der anderen Tabellen zugeordnet werden (Feld1 = TABLE_1.ID, FELD2 = TABLE_3.ID). Selbstverständlich sind TABLE_1.ID mehrere TABLE_2.IDs zugeordnet.

Soweit so gut. klappt auch alles ganz hervorragend und läuft stabil.
Ich möchte nun eine Abfrage starten, die mir mehrere Datensätze ausgibt.

Ich mache also einen SELECT, der wie folg aussieht:

SELECT DISTINCT TABLE_1.ID
FROM TABLE_1,TABLE_2,TABLE_3
WHERE (
TABLE_1.ID = TABLE_2.ID
)
AND (
TABLE_2.ID = TABLE_3.ID
)
AND (
TABLE_2.ID = '1'
)
AND (
TABLE_2.ID = '2'
)

Hier ist auch der Fehler, das ist mir klar. Es kann kein Ergebnis geben, in der TABLE_2.ID = 1 ist UND TABLE_2.ID = 2 ist.
Mit OR wäre das kein Problem.
Das Problem ist jedoch, dass ich trotzdem ein Ergebnis brauche, dass mir anzeigt zu welchen TABLE_3.IDs die TABLE_1.IDs zugeordnet sind.

Weis jemand Rat?

Vielen Dank

NoFate
 
Zuletzt bearbeitet:
Code:
SELECT DISTINCT TABLE_1.ID
FROM TABLE_1 LEFT JOIN TABLE_2 ON TABLE_1.ID = TABLE_2.ID 
LEFT JOIN TABLE_3 ON TABLE_2.ID = TABLE_3.ID
WHERE TABLE_2.ID = '1' OR TABLE_2.ID = '2'
Mir ist zwar nicht ganz klar, was du damit eingentlich bezweckst, aber so in der Art müsste es sein.

Ausserdem solltest Du für Primärschlüssel keine Strings (Texte) verwenden.
 
Hallo,

vielen Dank für den Tipp.

Habe soetwas auch schon probiert. Allerdings mit AND statt OR. Das frist mir bei etwa 1,8 Mio Einträgen allerdings zuviele Ressourcen.

Werde daher wohl oder übel die Tabellenstruktur etwas anpassen müssen.

P.S.: Es handelt sich um eine Fahrzeugdatenbank mit etwa 100.000 Fahrzeugen.

Liebe Grüße

Alex
 
Grundlegend sind Joins besser geeignet als die Kreuzstrukturabfragen und wesentlich schneller..
 
ich versteh noch nicht die tabelle3 :-(

von tabelle1 zu tabelle2 hast du scheinbar eine 1 zu N Realation

wie passt da tabelle3 rein?
 
Hallo,

In der Tabelle 1 stehen die Fahrzeuge.
In der Tabelle 3 stehen die Ausstattungsvarianten.
In der Tabelle 2 stehen die Beziehungen zwischen den Fahrzeugen und der Ausstattung.

Bsp:

FahrzeugID 1 hat AusstattungsID 1,2,5,7,10.
FahrzeugID 2 hat AusstattungsID 2,7,28,156,1257.

Ich möchte mir also alle Fahrzeuge anzeigen lassen, denen die AusstattungsID 2 UND 7 zugeordnet sind.

Liebe Grüße

Alex
 
Wenn deine Beziehungstabelle zwischen 1 und 2 die Tabelle 3 ist, dann musst du diese quasi in die Mitte deiner Abfrage nehmen.

Code:
SELECT TABELLE1.FahrzeugID 
FROM TABELLE1, TABELLE2, TABELLE3
WHERE TABELLE1.FahrzeugID = TABELLE3.FahrzeugID
AND       TABELLE 3.AusstattungsID = TABELLE2.AusstattungsID
AND       TABELLE2.AusstattungsID = 5

Damit bekommst du alle Fahrzeugids mit der Ausstattung 5
 
Exceptionfault hat gesagt.:
Wenn deine Beziehungstabelle zwischen 1 und 2 die Tabelle 3 ist, dann musst du diese quasi in die Mitte deiner Abfrage nehmen.

Code:
SELECT TABELLE1.FahrzeugID 
FROM TABELLE1, TABELLE2, TABELLE3
WHERE TABELLE1.FahrzeugID = TABELLE3.FahrzeugID
AND       TABELLE 3.AusstattungsID = TABELLE2.AusstattungsID
AND       TABELLE2.AusstattungsID = 5

Damit bekommst du alle Fahrzeugids mit der Ausstattung 5

Das ist vollkommen korrekt. So weit bin ich ja schon.
Ich will aber alle FahrzeugIDs, die mehr als eine AusstatungsID haben. :)
 
Dann klappts vielleicht so...

Code:
SELECT TABELLE1.FahrzeugID 
FROM TABELLE1, TABELLE2, TABELLE3
WHERE TABELLE1.FahrzeugID = TABELLE3.FahrzeugID
AND       TABELLE 3.AusstattungsID = TABELLE2.AusstattungsID
AND       TABELLE1.FAHRZEUGID IN (
  SELECT FAHRZEUGID
  FROM TABELLE3
  GROUP BY FAHRZEUGID
  HAVING COUNT(*) > 1
)
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück