MySQL, Bestellungen mit best. Artikel incl. aller Artikel
Lydia.h
- datenbank
0 Vinzenz Mai0 Lydia0 Vinzenz Mai0 Lydia
Hallo ihr Lieben,
mein Betreff hört sich kompliziert an, ist aber einfach.
Ich habe eine Tabelle Bestellungen, mit jeweils einem Datensatz pro Bestellung.
Dazu eine Artikel-Tabelle mit allen Artikeln, die zur Tabelle Bestellungen gehört:
Tabelle: Bestellung
Feld: BestID
Tabelle: Artikel
Feld: BestID
Problem
Jetzt suche ich alle Bestellungen mit einem bestimmten Artikel und möchte auch alle anderen Artikel der gefundenen Bestellungen anzeigen lassen.
In Access funktioniert das prima mit einer Unterabfrage:
SELECT Artikel.ArtikelID, Artikel.BestID
FROM Artikel
WHERE (((Artikel.BestID) In (SELECT BestID from Artikel where ArtikelID='12307')));
Aber MySQL macht das nicht.
Weiß jemand, wie das Statement sein muß, damit MySQL das selbe Ergebnis erzeugt?
Hallo,
bei Fragen zu MySQL ist es immer eine gute Idee, die verwendete Version anzugeben, da sich die Fähigkeiten von MySQL zwischen verschiedenen Versionen deutlich unterscheiden. Dies gilt ganz besonders für Dein Problem.
In Access funktioniert das prima mit einer Unterabfrage:
SELECT Artikel.ArtikelID, Artikel.BestID
FROM Artikel
WHERE (((Artikel.BestID) In (SELECT BestID from Artikel where ArtikelID='12307')));
Aber MySQL macht das nicht.
Selbstverständlich ist Dein SQL-Statement für MySQL überhaupt kein Problem, vorausgesetzt Du verwendest mindestens MySQL 4.1, da Subselects ab MySQL 4.1 unterstützt werden. Das läßt mich vermuten, dass Du eine ältere Version von MySQL verwendest. Es wäre für Deine potentiellen Helfer weiterhin hilfreich, die Fehlermeldung zu wissen, die MySQL ausgibt.
Dein Subselect sollte sich mit Hilfe eines Selfjoin umschreiben lassen:
SELECT
a1.ArtikelID -- verwende einen Alias für die Tabelle Artikel
FROM Artikel a1 -- da Du zweimal auf diese Tabelle zugreifst
INNER JOIN Artikel a2 -- und hier erneut einen Alias
ON a1.BestID = a2.BestID -- Verknüpfe über die BestID
WHERE a2.ArtikelID = 12307
sollte das gewünschte Ergebnis in MySQL < 4.1 liefern.
Freundliche Grüße
Vinzenz
Hallo Vinzent,
lieben Dank für Deine Info.
Die Fehlermeldung deutet auf eine 'falsche' Schreibweise hin:
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 BestID FROM Artikel ...'
(Ist der Beginn der Unterabfrage, die ja in Klammern steht.)
Die MySQL-Version gibt der Provider nicht bekannt, daher gehe ich von einer ziemlich aktuellen Version aus.
Deine Unterabfrage stimmt jedenfalls, da bekomme ich, was ich will :-)
Allerdings würde mich schon interessieren, warum die Unterabfrage nicht geht.
Auf jeden Fall schon mal einen lieben Dank an Dich!
Ly.
Hallo,
bei Fragen zu MySQL ist es immer eine gute Idee, die verwendete Version anzugeben, da sich die Fähigkeiten von MySQL zwischen verschiedenen Versionen deutlich unterscheiden. Dies gilt ganz besonders für Dein Problem.
In Access funktioniert das prima mit einer Unterabfrage:
SELECT Artikel.ArtikelID, Artikel.BestID
FROM Artikel
WHERE (((Artikel.BestID) In (SELECT BestID from Artikel where ArtikelID='12307')));Aber MySQL macht das nicht.
Selbstverständlich ist Dein SQL-Statement für MySQL überhaupt kein Problem, vorausgesetzt Du verwendest mindestens MySQL 4.1, da Subselects ab MySQL 4.1 unterstützt werden. Das läßt mich vermuten, dass Du eine ältere Version von MySQL verwendest. Es wäre für Deine potentiellen Helfer weiterhin hilfreich, die Fehlermeldung zu wissen, die MySQL ausgibt.
Dein Subselect sollte sich mit Hilfe eines Selfjoin umschreiben lassen:
SELECT
a1.ArtikelID -- verwende einen Alias für die Tabelle Artikel
FROM Artikel a1 -- da Du zweimal auf diese Tabelle zugreifst
INNER JOIN Artikel a2 -- und hier erneut einen Alias
ON a1.BestID = a2.BestID -- Verknüpfe über die BestID
WHERE a2.ArtikelID = 12307
>
> sollte das gewünschte Ergebnis in MySQL < 4.1 liefern.
>
>
> Freundliche Grüße
>
> Vinzenz
Hallo,
bitte kein TOFU
Die Fehlermeldung deutet auf eine 'falsche' Schreibweise hin:
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 BestID FROM Artikel ...'
das deutet noch mehr darauf hin, dass Dir eine alte MySQL-Version zur Verfügung steht.
Die MySQL-Version gibt der Provider nicht bekannt, daher gehe ich von einer ziemlich aktuellen Version aus.
Frage MySQL :-)
SELECT [link:http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#id3071881@title=VERSION()]
sollte Dir Aufschluss über die verwendete Version geben.
Deine Unterabfrage stimmt jedenfalls, da bekomme ich, was ich will :-)
Das ist zunächst das Wichtigste.
Allerdings würde mich schon interessieren, warum die Unterabfrage nicht geht.
Meine Glaskugel sagt mir, Deine MySQL-Version ist nicht so neu wie Du vermutest ...
Freundliche Grüße
Vinzenz
Hallo Vinz, (darf ich doch sagen, es gibt einen Spielfilm dazu :-)
Meine Glaskugel sagt mir, Deine MySQL-Version ist nicht so neu wie Du vermutest ...
Und die Glaskugel hat Recht: '4.0.27-standard-log' sagt Deine Abfrage. Ist das meine Schuld, oder die des Providers?
Freundliche Grüße
Vinzenz
Hallo,
Hallo Vinz, (darf ich doch sagen, es gibt einen Spielfilm dazu :-)
wie lautet der Titel des Films, bitte?
Meine Glaskugel sagt mir, Deine MySQL-Version ist nicht so neu wie Du vermutest ...
Und die Glaskugel hat Recht: '4.0.27-standard-log' sagt Deine Abfrage. Ist das meine Schuld, oder die des Providers?
Suche es Dir aus:
[ ] Es ist die Schuld Deines Providers, da er keine neuere zur Verfügung stellt.
[ ] Es ist Deine Schuld, weil Du Dir diesen Provider ausgesucht hast ...
Freundliche Grüße
Vinzenz