SQL-Abfrage für unterschiedliche MySQL Versionen
Rebecca
- datenbank
Hallo zusammen,
ich verwende auf dem lokalen Server ein SQL-Statement, welches auf dem online-Server zu Fehlern führt.
Die lokale Version von mySql ist: 4.1.14
Die Version von mySql auf dem online-Server ist: 4.0.23
Die SQL-Abfrage schaut folgendermaßen aus:
SELECT COUNT(*) AS total
FROM t_persons
WHERE
(
t_persons.category NOT IN
(
SELECT category_Id FROM t_categories
)
)
Erklärung: Ich habe die beiden Tabellen t_persons und t_categories. Als Ergebnis der Abfrage möchte ich die Anzahl der Zeilen aus der Tabelle t_persons haben, deren 'category'-Inhalt nicht einem der Werte aus der Tabelle 't_categories', Spalte 'category_Id' entspricht.
Auf gut deutsch: alle Personen die keiner Kategorie zugeordnet sind.
Könnt Ihr mir auf den ersten Blick sagen ob es an der Version liegt, dass es nicht auf dem online-Server funktioniert?
Es erscheint die Fehlermeldung:
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 'SELECT category_Id FROM t_categories))' at line 1
Wenn ich aber nur "SELECT category_Id FROM t_categories" auf die DB loslasse erhalte ich eine gültige Ergebnismenge.
Vielen Dank im Voraus
Liebe Grüße
Rebecca
hi,
Könnt Ihr mir auf den ersten Blick sagen ob es an der Version liegt, dass es nicht auf dem online-Server funktioniert?
Ja - http://dev.mysql.com/doc/refman/4.1/en/subqueries.html
"Starting with MySQL 4.1, all subquery forms and operations that the SQL standard requires are supported, as well as a few features that are MySQL-specific.
With MySQL versions prior to 4.1, it was necessary to work around or avoid the use of subqueries. In many cases, subqueries can successfully be rewritten using joins and other methods. See Section 13.2.8.11, “Rewriting Subqueries as Joins for Earlier MySQL Versions”."
gruß,
wahsaga
Hallo Wahsaga,
vielen Dank für die schnelle Antwort. Habs ausprobiert und es hat geholfen.
Liebe Grüße
Rebecca