PDA

Vollständige Version anzeigen : help, abfragen von access in sql wollen nicht


TKM
19.11.2002, 20:18
also. ich hab ne datenbank von access in eine mysql datenbank umgewandelt und will jetzt die abfragen von access nutzen.

SQL-Befehl :

SELECT Hauptdaten.SpieleID, Hauptdaten.Spielename, Hauptdaten.Untertitel, Hauptdaten.Beschreibung, Genre.Genre, Firmen.Entwickler, Sprache.Sprache, System.System, USK.USK FROM ((USK INNER JOIN (Genre INNER JOIN (Firmen INNER JOIN Hauptdaten ON Firmen.FirmenID = Hauptdaten.FirmenID) ON Genre.GenreID = Hauptdaten.GenreID) ON USK.USKID = Hauptdaten.USKID) INNER JOIN (System INNER JOIN Zwischentabelle2 ON System.SystemID = Zwischentabelle2.SystemID) ON Hauptdaten.SpieleID = Zwischentabelle2.SpieleID) INNER JOIN (Sprache INNER JOIN Zwischentabelle ON Sprache.SprachID = Zwischentabelle.SprachID) ON Hauptdaten.SpieleID = Zwischentabelle.SpieleID LIMIT 0, 30

MySQL meldet:


You have an error in your SQL syntax near '(Genre INNER JOIN (Firmen INNER JOIN Hauptdaten ON Firmen.FirmenID = Hauptdaten.' at line 1


woher kommt dieser fehler???

MfG
Thomas

TKM
19.11.2002, 20:41
hier nochmal nen bild zur abfrage in access. blickt ja sonst keiner durch.

<a href="http://www.sunsity.net/img/abfrage.jpg" target="_blank">http://www.sunsity.net/img/abfrage.jpg</a>

A.S.
19.11.2002, 21:22
Anfragen die Spezifika oder technische Fragen der generellen Systemanbindung anderer SQL-Dialekte angehen, bitte im SQL-Forum stellen.

Dieser Beitrag wird dahin verschoben.

Hirn
19.11.2002, 22:18
Hi,

bin mir nicht sicher, aber könnte an dem gleichen Namen für Felder und Tabellen liegen!?! Versuchs halt mal!


Gruß Ron

Bernd Koch
19.11.2002, 22:34
Selbst wenn es nicht an dem Grund liegt, den Ron schreibt, solltest du ihn zukünftig - zumindest in Access - beherzigen.

Für Tabellen am besten tbl_..., für Abfragen qry_... (von query), für Formulare frm_... usw.

Nun aber zu deinem Problem - ich habe relativ wenig Ahnung von MySQL aber wenn ich von Access ausgehe, so wäre es problematisch, dass du das Feld "SpieleID" aus der Hauptdatentabelle nach unten gezogen hast, denn dort ist "SpieleID" ja ein Autowert-Feld.

Jetzt stell dir mal vor, du möchtest in dieser Abfrage - ähnlich meinem früheren Beispiel aus deinem anderen Thread - für ein neues Spiel zwei Sprachversionen anlegen:

- du gibst das neue Spiel zum ersten Mal ein, es wird von Access automatisch eine neue SpieleID-Nummer erzeugt und du gibst die deutsche Sprachversion ein

- nun möchtest du, mit der selben SpieleID-Nummer die englische Sprachversion eingeben ... merkst du was?!?!

Deshalb probier es mal mit der SpieleID aus einer der Zwischentabellen ... das wäre zumindest in Access besser.

Ob es mit MySQL auch wass bringt???

Bernd

TKM
20.11.2002, 17:15
habe ich probiert... bringt aber nichts.

ich habe rausgefunden, dass mysql einen syntax fehler ausspuckt sobald die abfrage so kompliziert wird, dass access zur formulierung klammern benutzt. kleine abfragen funktionieren problemlos.

TKM
20.11.2002, 17:51
der error zeigt auch immer direkt auf die erste klammer. mmh mmh... jetzt erklär mir ma einer wie ich das ohne klammern formulier.

Joachim Hofmann
21.11.2002, 11:08
Das ist da das wildeste, was ich je gesehen habe ;-)
Hier eine formatierte Übersicht:


<FONT color=#804040>SELECT</FONT> Hauptdaten.SpieleID,
Hauptdaten.Spielename,
Hauptdaten.Untertitel,
Hauptdaten.Beschreibung,
Genre.Genre,
Firmen.Entwickler,
Sprache.Sprache,
System.System,
USK.USK
<FONT color=#6a5acd>FROM</FONT>
(
(
USK <FONT color=#6a5acd>INNER</FONT> <FONT color=#6a5acd>JOIN</FONT> (Genre <FONT color=#6a5acd>INNER</FONT> <FONT color=#6a5acd>JOIN</FONT>
(
Firmen <FONT color=#6a5acd>INNER</FONT> <FONT color=#6a5acd>JOIN</FONT> Hauptdaten
<FONT color=#6a5acd>ON</FONT> Firmen.FirmenID = Hauptdaten.FirmenID
)
<FONT color=#6a5acd>ON</FONT> Genre.GenreID = Hauptdaten.GenreID)
<FONT color=#6a5acd>ON</FONT> USK.USKID = Hauptdaten.USKID
)
<FONT color=#6a5acd>INNER</FONT> <FONT color=#6a5acd>JOIN</FONT>
(
System <FONT color=#6a5acd>INNER</FONT> <FONT color=#6a5acd>JOIN</FONT> Zwischentabelle2
<FONT color=#6a5acd>ON</FONT> System.SystemID = Zwischentabelle2.SystemID
)
<FONT color=#6a5acd>ON</FONT> Hauptdaten.SpieleID = Zwischentabelle2.SpieleID
)
<FONT color=#6a5acd>INNER</FONT> <FONT color=#6a5acd>JOIN</FONT>
(
Sprache <FONT color=#6a5acd>INNER</FONT> <FONT color=#6a5acd>JOIN</FONT> Zwischentabelle
<FONT color=#6a5acd>ON</FONT> Sprache.SprachID = Zwischentabelle.SprachID
)
<FONT color=#6a5acd>ON</FONT> Hauptdaten.SpieleID = Zwischentabelle.SpieleID LIMIT <FONT color=#ff00ff>0</FONT>, <FONT color=#ff00ff>30</FONT>


Access hat die Angewohnheit, bei der "Verjoinung" extra viel Klammern zu setzen. Diese sind nach meiner Erfahrung nicht immer nötig und stoßen bei anderen SQL Umgebungen wie Deinem Mysql auf.

Versuche vorsichtig, die Klammernpaare bei den Joins eins nach dem anderen, vielleicht von innen nach außen oder da, wo der Compiler meckert, zu entfernen und teste immer mal wieder zwischen.

HTH