Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Problem mit SQL - Abfrage





Frage

Hallo, ich greife über die ODBC - Schnittstelle auf eine access-Datenbank zu. Ich möchte nun mit einer SQL-Abfrage einen bestimmten Datensatz abfragen.... wenn ich es nach dem Schema SELECT * FROM tabelle1 mache, funktioniert alles ohne Probleme,. Bei folgender Abfrage sagt er mir aber, das ich einen Fehler in der FROM - Klausel habe und ich kann die Abfrage sooft durchschauen, wie ich möchte, ich finde einfach keinen fehler.... vielleicht könnt ihr mir ja weiterhelfen!! Hier ist die SQL - Abfrage: [code]SELECT spalteX, spalteY FROM TabelleX JOIN TabelleY ON spalteX = spalteY WHERE spalteZ.TabelleY LIKE ´BLA´ [/code] Hoffe, ihr könnt mir weiterhelfen...!!! Gruß Sashka

Antwort 1 von ditsch

Versuchs mal mit
SELECT TabelleX.spalteX, TabelleY.spalteY FROM TabelleX , TabelleY WHERE TabelleX.spalteX = TabelleY.spalteY and TabelleY.spalteZ LIKE ´BLA´

Antwort 2 von Sashka

danke für die schnelle Antwort!

Wenn ich das so mache, sagt er mir Syntaxfehler in Abfrageausdruck TabelleX.spalteX

so scheint es also auch incht zu gehen....hatte es auch schon mal so ähnlich ausprobiert....

Antwort 3 von disco

moin
also On hab ich glaub ich noch nie benutzt.
ich würds so machen:

SELECT sX,sY FROM tX JOIN tY WHERE tX.sX = tY.sY AND tY.sZ = "bla";

ggf. musste doppelte auswürfe durch GROUP BY kompensieren.

sag wenn geholfen hat.

g,
disco

Antwort 4 von ElBobbele

Hi sashka!

Dem JOIN-Ausdruck muss ein INNER, LEFT oder RIGHT vorangestellt werden. Ausserdem hast du im ON-Abschnitt nur die Feldnamen aufgelistet. An dieser Stelle muss immer eine Kombination aus Tabellen- und Feldname aufgeführt werden. Der dritte Fehler ist in der Bedingung, "TabelleY" und "spalteZ" müssen ihre Plätze tauschen.

Die richtige SQL-Anweisung schaut demnach so aus:
SELECT spalteX, spalteY 
FROM TabelleX INNER JOIN TabelleY ON TabelleX.spalteX = TabelleY.spalteY 
WHERE TabelleY.spalteZ LIKE ´BLA´ 


Problematische Abfragen solltest du vielleicht mit dem Abfrageeditor in Access erzeugen, der ist bequem zu bedienen. Anschließend kannst du dir den fertigen SQL-Ausdruck in der SQL-Ansicht herauskopieren.

Gruss
El Bobbele

Antwort 5 von draack

Hi,

es ist ein klassicher Fehler in diesem Fall ´LIKE´ zu benutzen. Du verwendest überhaupt kein Jokerzeichen (´%´). Du machst einen einfachen Vergleich. Dafür reicht ´=´.
SELECT TabelleX.spalteX, TabelleX.spalteY
FROM TabelleX, TabelleY
WHERE TabelleX.spalteX = TabelleY.spalteY
AND TabelleY.spalteZ = ´BLA´ 

Das sollte funktionieren (ist auch mit älteren SQL-Standards ohne ´JOIN´ konform).

Tschö,
Volker

Antwort 6 von Sashka

Hallo,

habe die letzte Möglichkeit getestet, da es aber wieder nicht funktionierte, habe ich mir noch zwei test-tabellen angelegt.

Dafür sieht die Abfrage wie folgt aus:


SELECT test_1, test_3 FROM tabelle1, tabelle2 WHERE tabelle1.test_1 = tabelle2.test_3 AND tabelle2.test_4 = ´test4´


Hier funktioniert es ohne Probleme, es gibt keine Fehlermeldung und es werden auch die richtigen ergebnisse ausgegeben.

Dann habe ich alles nocheinmal schritt für schritt auf meine eigentlichen tabellen übertragen, das sieht wie folgt aus:


SELECT MAT_OBID, OBID
FROM 041206_MatVersionen_Info, 041206_Material_Infos
WHERE 041206_MatVersionen_Infos.MAT_OBID = 041206_Material_Infos.OBID
AND 041206_Material_Infos.PARTNUMBER = ´test455545´


rein theoretisch müsste es ja Funktionieren..... tut es aber leider nicht. Als Fehlermeldung bekomme ich "Syntaxfehler in Abfrageausdruck ´041206_MatVersionen_Infos.MAT_OBID = 041206_Material_Infos.OBID AND 041206_Material_Infos.PARTNUMBER = ´test455545´!

Also genau das, was hinter dem WHERE steht.


könnte es irgendwie an den bezeichnungen liegen, das die evtl. zu lang sind o.ä., das er das nicht mag!?

Gruß
Sashka

Antwort 7 von draack

Hi,

ich kann keinen Fehler in meiner Abfrage erkennen - allerdings vermisse ich in deiner immer noch die Tabellennamen vor den Spaltennamen nach dem "SELECT". Du musst schon genau sagen, aus welcher Tabelle die Spalte denn kommen soll ...

Tschö,
Volker

Antwort 8 von Sashka

hi,

eigentlich sollte es ja egal sein, ob die Tabellennamen davor stehen oder nicht, wenn die Bezeichnungen eindeutig sind....! Wenn ich alles ab dem WHERE weglasse, funktioniert es ja auch.... also weiß er ja, welche Spaltennamen gemeint sind...!
Und in den Test-Tabellen funktioniert es ja auch, ohne das ich die Tabellen explizit angebe, also wird da nicht der Fehler liegen.... ;-)

Gruß
Sashka

Antwort 9 von ThomasG

Nur ein Schreibfehler?

SELECT MAT_OBID, OBID
FROM 041206_MatVersionen_Info, 041206_Material_Infos WHERE 041206_MatVersionen_Infos
.MAT_OBID = 041206_Material_Infos.OBID
AND 041206_Material_Infos.PARTNUMBER = ´test455545´


Gruß
Thomas

Antwort 10 von Sashka

ja, den schreibfehler habe ich schon bemerkt und das in meiner Abfrage berichtigt (nur hier habe ich es nicht berichtigt)....aber daran liegt es nicht, der Fehler tritt leider weiterhin auf... :-(

Antwort 11 von ThomasG

Hallo,

ich würde Dir ein SQL - Statement erstellen wenn Du mir genau beschreibst was Du benötigst!

Also, Du hast z.Bsp. 2 Tabellen die über ein Schlüsselfeld miteinander verbunden sind. Aus einer dieser Tabelle willst Du dann Daten ziehen mit einer bestimmten Bedingung. Felder der anderen Datei sollen im Ergebnis angezeigt werden.

Wenn das so richtig ist, dann brauche ich mal Dein Tabellen- und Feldnamen.

Gruß
Thomas

Antwort 12 von Hinki27

Hallo Sashka,

sind die zwei Felder für die Beziehung von gleichen Typ? Die Verschiedenen angeführten Verfahren (JOIN, WHERE) sind alle korrekt.

Gruß
Ralf

Antwort 13 von Sashka

@ ThomasG: Ja, das ist in etwa das, was ich vorhatte. Mit den SQL-Statements habe ich "eigentlich" keine größeren Probleme, weil ich das ja auch in der Schule durchnehme, aber irgendwie will es nicht so wirklich klappen und ich weiß leider nicht warum, habe die Abfrage auch schon Mitschülern und meinem Lehrer (bei dem wir gerade SQL-durchnehmen und der auch wirklich ahnung davon hat) gezeigt, aber alle meinten, das es so völlig korrekt ist und eigentlich funktionieren müsste....!
Aber du kannst gerne einmal dein Glück Probieren ;-)

Also, ich habe die Tabelle 041206_MatVersionen_Infos von der ich die spalte MAT_OBID mit der spalte OBID von der Tabelle 041206_Material_Infos verknüpfen will/muss (z.B. mit ´nem JOIN) die sind auch beide von gleichen Typ und es steht exakt das gleiche drin.... und dann möchte ich, das nur die Datensätze ausgegeben werden, wo ein String-Wert gleich dem wert von der Spalte PARTNUMBER der Tabelle 041206_Material_Infos ausgegeben werden...... wegen mir können in dem Statement auch alle Datensätze einer Tabelle ausgegeben werden, also ala SELECT * FROM 041206_Material_Infos .... das auswählen der Spalten sollte ich ja noch selbst hinkriegen ;-)



@ Hinki27: Ja, die sind beide vom gleichen Typ, sprich es sind einfache Textfelder/strings/varchar, was auch immer.... (also in access steht das es Typ "Text" ist.... ;-)



Gruß
Sashka

Antwort 14 von Hinki27

Hallo Sashka,

setze um deine Tabellennamen im Where-Kriterium "[" und "]", oder nimm die Ziffernfolge "041206_" aus den Tabellenbezeichnungen und der Abfrage raus. Die Felder benutze ohne vorangestellten Tabellennamen. Bei meinem Test hat das geholfen.

SELECT MAT_OBID,OBID
FROM 041206_MatVersionen_Info, 041206_Material_Infos
WHERE ((([041206_MatVersionen_Info].MAT_OBID)=[041206_Material_Infos].[OBID]) AND (([041206_Material_Infos].PARTNUMBER)=´test455545´));

Gruß
Ralf

Antwort 15 von Sashka

Hallo Hinki27,

ich habe nun die Ziffernfolge und den Unterstrich rausgenommen und jetzt funktioniert es.... ;-)
Aber irgendwie ist es ja schon etwas komisch.....aber vielen dank, hauptsache es funktioniert jetzt..... ;-)

nochmals vielen dank!!!


Gruß
Sashka

Antwort 16 von draack

Hi,

@Sashka: Wieso hast du eigentlich die Ziffern und den Unterstrich in die Abfrage mit aufgenommen? Die stehen doch nicht wirklich so in deiner MS Access DB?

Tschö,
Volker

Antwort 17 von Sashka

doch, die stehen da so drin.....die ziffern stehen für das datum an dem die datenbank erstellt wurde.
Die habe ich aber nicht erstellt, sondern so übergeben bekommen...!
Aber jetzt stehen die da nicht mehr so drin ;-)

Sashka

Antwort 18 von draack

Hi,

dann ist das das Problem. Soweit ich mich erinner sieht der SQL-Standard einen Buchstaben als erstes Zeichen des Tabellennamens vor - da ist die ODBC-Schnittstelle also pingeliger als MS Access. Womit mal wieder bewiesen wäre, das MS Access kein "richtiges" RDBMS ist.

Tschö,
Volker

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: