Select ohne Subselect, dafür mit Joins (dringend)

Hallo alle!

Ich bin schon das ganze Wochenende am Programmieren, und stehe jetzt vor einem kleinen Problem und kann ohne Lösung leider nicht weitermachen. Ich habe eine Select-Anweisung mit Subselect, kann aber dank MySQL keine Subselects, Union und Views nutzen. Vielleicht kann mir hier ja jemand weiterhelfen, ich finde einfach keine Lösung:

SELECT fid,frage,image,typ
FROM frage
WHERE fid NOT IN
(SELECT fid
FROM ergebnisse
WHERE uid = ‚$uid‘
AND rid = ‚$rid‘
AND ergebnis = ‚r‘
)

So müßte es mit Subselect aussehen, ich konnte es leider nicht testen, aber sollte denke ich richtig sein. Nur wie bekomme ich nun das gleiche Ergebnis ohne Subselect/Union/Views hin?

Bin für jede Hilfe dankbar!

Danke,
Ron

Hi,
Normalerweise ist ein Select mit Not-In-Subselect der Einfachen Art durch ein Outer Join mit Test auf Null zu ersetzen:

SELECT x, y, z 
 FROM tab1
 WHERE b NOT IN (SELECT b FROM tab2)

geht über in:

SELECT x, y, z 
 FROM tab1 LEFT JOIN tab2 
 ON tab1.b = tab2.b
 WHERE tab2.b IS NULL

Durch die weiteren Bedingungen in deinen Subselect geht das nicht so leicht, sondern erst mit einem Zwischenschritt:

CREATE VIEW temp AS
SELECT fid 
 FROM ergebnisse
 WHERE uid = '$uid'
 AND rid = '$rid'
 AND ergebnis = 'r'

Dann kannst Du das oben angegebene Select aufbauen:

SELECT fid,frage,image,typ
 FROM frage LEFT JOIN temp
 ON frage.fid = temp.fid
 WHERE temp.fid IS NULL

Das dürfte klappen, abgesehen davon, daß DU die View bei jeder Parametereingabe auswechseln mußt.

Habe kein MySQL installiert, also alles zum Ausprobieren!

Gruß

J.

P.S. Ein &ltpre>-Tag wirkt Wunder bei der Lesbarkeit!

Durch die weiteren Bedingungen in deinen Subselect geht das
nicht so leicht, sondern erst mit einem Zwischenschritt:

CREATE VIEW temp AS

Hallo José,

danke für die Antwort. Leider hat das ganze nen Haken: Ich kann auch keine Views nutzen, die werden bei MySQL (zumindest bei meiner Version) zur Zeit auch noch nicht unterstützt. :frowning:

Meine bisher beste Lösung ist das hier:

SELECT f.fid,f.frage,f.image,f.typ,e.fid 
FROM frage f,ergebnisse e 
WHERE e.fid f.fid 
AND e.ergebnis = 'r' 
AND e.uid = '$authuser' 
AND e.rid = '$rid'

Das funktioniert alles soweit, nur werden noch Datensätze ausgegeben, wo e.ergebnis = ‚r‘ ist. Ich schätze, so einfach kann ich mir das wohl nicht machen, was?

P.S. Ein

-Tag wirkt Wunder bei der Lesbarkeit!

Werde ich mir merken.

Viele Grüße,
Ron

Hab ne Lösung gefunden
Wollte nur kurz Bescheid geben, dass ich eine Lösung gefunden habe und sich damit das Problem erledigt hat. Ich mache es jetzt mit zwei Abfragen und einem Array…

Viele Grüße,
Ron