mysql unterabfragen
Ilja
- datenbank
0 Daniela Koller0 Ilja0 Daniela Koller0 Ilja
hi,
ich versuche in mysql einen select statement mit einer unterabrfrage zu basteln. beide abfragen für sich funktionieren, nur zusammen bekomme ich sie nicht korrekt zum laufen.
SELECT spalte1, spalte2... FROM tabelle1, tebelle2 ... WHERE bedingung1 AND bedingung2.... AND i.id NOT EXISTS (SELECT spalte1 FROM tabelle1 WHERE bedingung1) ORDER BY spalte1
fehlermeldung: You have an error in your SQL syntax near 'EXISTS (SELECT item_id FROM keyss WHERE character_id='37') ORDER BY i.item' at line 1-1
wer weiss rat ?
Ilja
Hi Ilja
SELECT spalte1, spalte2... FROM tabelle1, tebelle2 ... WHERE bedingung1 AND bedingung2.... AND i.id NOT EXISTS (SELECT spalte1 FROM tabelle1 WHERE bedingung1) ORDER BY spalte1
fehlermeldung: You have an error in your SQL syntax near 'EXISTS (SELECT item_id FROM keyss WHERE character_id='37') ORDER BY i.item' at line 1-1
a) MySQL unterstützt erst ab den 4er Version Subselects
b) Syntaktischen Bockmist wird es auch dann nicht unterstützen.
AND i.id NOT EXISTS (SELECT spalte1 FROM tabelle1 WHERE bedingung1)
Was soll das hier darstellen? Entweder ein Wert ist nicht in einer Liste eingetragen die eine Query zurück gibt, dann wäre es AND i.id NOT IN (SELECT ...) oder aber, eine bestimmte Query gibt keinen Wert zurück, dann wäre es AND NOT EXISTS(SELECT ...).
Gruss Daniela
hi Daniela,
habe gerade auf den server nachgeschaut, die mysql version ist leider nur 3.23.49. macht also kein sinn, eine unterabfrage zu benutzen, auch wenn sie wie in meinen fall falsch formuliert war. die frage ist nun, wie kann man das problem lösen ? ich suche bestimme daten über mehrere tabellen, wobei bestimmte datensätze nicht angezeigt werden sollen, dessen id schon in einer weiteren tabelle angegeben ist. ich habe das problem schon mal so gelöst gehabt, indem ich einfach erst mal alle datensätze ausgelesen habe und dann wie aschenputtel die streu vom weizen getrennt habe. finde diese lösung aber nicht so elegant. hast du vielleicht einen tip für mich ?
Ilja
Hi Ilja
habe gerade auf den server nachgeschaut, die mysql version ist leider nur 3.23.49. macht also kein sinn, eine unterabfrage zu benutzen, auch wenn sie wie in meinen fall falsch formuliert war. die frage ist nun, wie kann man das problem lösen ? ich suche bestimme daten über mehrere tabellen, wobei bestimmte datensätze nicht angezeigt werden sollen, dessen id schon in einer weiteren tabelle angegeben ist.
Du könntest diese Tabelle mit einem OUTER JOIN dazu joinen und dann alle Datensätze, die in der ID-Spalte aus der dazugejointen Tabelle etwas anderes als NULL haben, wegwerfen.
In etwa so:
SELECT ...
FROM tab1
LEFT OUTER JOIN tab_wo_es_nicht_existieren_darf
ON (tab1.fk = tab2.pk)
WHERE tab2.id = NULL
Gruss Daniela
Hi Daniela,
habe es gerade mit einem inner-join hinbekommen. danke nochmal für deine mühe.
Ilja