NOT EXISTS - Anweisung in MySQL

joeyjmr

Grünschnabel
hallo,

ich hab ein problem, ich versuche eine SELECT - abfrage zu schreiben die mir nur einer tabelle liefern soll sofern die id eines datensatzes in einer anderen tablle nicht vorkommt.
ich habe da etwas rumgespielt und mit folgender schien es zu funktionieren:

Code:
SELECT DISTINCT *
FROM produkte  WHERE NOT EXISTS
   (SELECT *
   FROM kategorien_produkte 
   WHERE produkte.id = kategorien_produkte.pro_id)

lokal im meinem php script lief diese. nach dem ich sie auf dem server testen wollte funktionierte sie nicht mehr. ich bin dann in phpmyadmin, auf dem server, und habe sie dort getestet bekomme aber nur folgende fehlermeldung:

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXISTS ( SELECT * FROM kategorien_produkte WHERE produkte .

dann habe ich die sql mal lokal in phpmydamin getestet und die gleiche fehlermeldung bekommen, komischer weise hat mir die sql im php script aber die richtigen datensätze geliefert.

hat jemand eine idee was ich da machen kann?
 
Kann es sein, dass Du lokal MySQL > Version 4.1 hast und auf dem Server nur 4.0 oder kleiner zur Verfügung steht?

Gruß hpvw
 
4.0 unterstützt keine Subqueries. Ich vermute mal, NOT EXISTS ist auch erst mit den Subqueries gekommen. Mit NOT IN müsste die Fehlermeldung wohl etwas anders aussehen und als Hinweis erst mit dem zweiten SELECT beginnen.

Kommen wir zur Lösung:
Es gibt für diesen Fall einen typischen Workaround mit einem LEFT JOIN.
Ein Beispiel, keine Garantie, dass es syntaktisch exact richtig ist:
SQL:
SELECT DISTINCT *
FROM produkte 
LEFT JOIN kategorien_produkte 
  ON produkte.id = kategorien_produkte.pro_id
WHERE kategorien_produkte.pro_id IS NULL
Eine (etwas weiter führende) Erklärung habe ich schon mal bei einem verwandten LEFT-JOIN-Workaround gepostet.

Gruß hpvw
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück