Entwickler-Ecke

Datenbanken - Invalid use of Keyword. Token: =


Nakisu - So 30.01.05 13:28
Titel: Invalid use of Keyword. Token: =
Guten Tag

Ich plag mich seit Stunden mit einer SQL Abfrage über mehrere Tabellen ab :'(

DB: Paradox 7
Tabellen
Personen: Id, Name, Vorname, ...
Kurse: Id, Name
Personen_Kurse: Id, Id_Person, Id_Kurs

Ich möchte nun alle Personen aus der Tab "Personen", die im Kurs mit Id 1 sind auslesen

Der SQL String sieht so aus:
SELECT Personen.* FROM Personen JOIN
Personen_Kurse ON Personen.Id = Personen_Kurse.Id_Person
WHERE Personen_Kurse.Id_Kurs = 1 ORDER BY Personen.Name,
Personen.Vorname

Leider erhalte ich immer die Fehlermeldung:
Invalid use of Keyword.
Token: =
Line Number: 3

Ich hab keine Ahnung, wo hier das Problem liegt und bin dankbar für jeden Hinweis

LG
Nakisu


grayfox - So 30.01.05 14:48

hallo nakisu!

zunächst mal willkommen im forum :)

Zitat:
SELECT Personen.*

das sieht mir schon mal sehr komisch aus. wofür steht hier '.*'? :gruebel:

versuchs mal so:
einfach ins forum getippt - ganz ohne gewähr ;)
Zitat:

SELECT p.Zuname, p.Vorname FROM Personen p
JOIN Personen_Kurse pk ON (p.Id = pk.Id_Person)
WHERE (pk.Id_Kurs = 1)
ORDER BY p.ZuName, p.Vorname


mfg, stefan


Nakisu - So 30.01.05 15:36

Heyho

Herzlichen Dank schon mal für die Antwort!

Das * hab ich geschrieben, weil ich alle Felder auslesen will. Ich hab jetzt mal deine Version angepasst und folgenden Befehl kreiert


Quelltext
1:
2:
3:
4:
SELECT p.Name, p.Vorname, p.Strasse, p.PLZ, p.Ort, p.TelG, p.TelP, p.Natel, p.Fax, p.Mail, p.Website, p.Beruf, p.Funktion, p.Notizen, p.Id 
FROM Personen p 
JOIN Personen_Kurse pk ON (p.Id = pk.Id_Person) 
WHERE (pk.Id_Kurs = 1) ORDER BY p.Name, p.Vorname


Leider krieg ich immer noch die selbe Fehlermeldung :(

An was könnte das noch liegen?

LG
Nakisu

Moderiert von user profile iconraziel: Code-Tags hinzugefügt


Nakisu - So 30.01.05 16:40

Na toll!

Ich hab alle Tabellen gelöscht und neu angelegt und nun taucht die Fehlermeldung bei einer normalen Abfragen nicht mehr auf.
:?: Wieso auch immer :?:

Bei folgender Abfrage motzt er aber immer noch:

SELECT p.Name, p.Vorname, p.Strasse, p.PLZ, p.Ort, p.TelG, p.TelP, p.Natel, p.Fax, p.Mail, p.Website, p.Beruf, p.Funktion, p.Notizen, p.Id
FROM Personen p
JOIN Personen_Kurse pk ON (p.Id = pk.Id_Person)
WHERE pk.Id_Kurs = 1
AND pk.Id_Kurs = 2
ORDER BY p.Name, p.Vorname

d.h. ich möchte eigentlich hier die Personen auslesen, die sowohl in Kurs 1, wie in Kurs 2 sind. Also in der Tabelle Personen_Kurse Id_Person nur auslesen, wenn folgende Einträge vorhanden sind:
Id_Person = 1, Id_Kurs = 1
Id_Person = 1, Id_Kurs = 2

Vermutlich stört sich hier SQL daran, dass ich 2x die selbe Spalte abfrage mit einem anderen Wert.

LG
Nakisu


grayfox - So 30.01.05 17:55

Zitat:
die sowohl in Kurs 1, wie in Kurs 2 sind

bei uns heisst es aber ... die sowohl in kurs 1, als auch...
bei euch nicht? :twisted:

versuch es mal so

Quelltext
1:
WHERE (pk.Id_Kurs = 1) OR (pk.Id_Kurs = 2)                    


untested & ohne gewähr ;)

//Edit (zu spät gelesen...)

Zitat:

Das * hab ich geschrieben, weil ich alle Felder auslesen will


dafür reicht auch ein einfaches

Quelltext
1:
SELECT * FROM Tabellenname                    


Nakisu - Mo 31.01.05 19:40

Heyho

Möge er mein "wie" entschuldigen... machmal bricht der Schweizer mit mir durch :D - aber danke für den Hinweis.

Wenn ich eine OR Abfrage mache, heisst das dann doch, dass eine Person ausgelesen wird wenn sie entweder in Kurs 1 ist oder in Kurs 2 ist, ich möchte aber in diesem Fall nur die Leute auslesen können, die in beiden Kursen sind.

Das OR Problem ist ein weiteres... Wenn ich Personen auslesen möchte, die entweder in Kurs 1 oder in Kurs 2 sind, dann listet es mir die Personen 2x auf, die sowohl in Kurs 1, als (ja aaaals) auch in Kurs 2 sind.

*grübel*

LG
Nakisu


grayfox - Mo 31.01.05 19:53

hallo nakisu!

bei logischen abfragen ist es eben so, dass du alle kursteilnehmer von kurs_1 und alle von kurs_2 nur dann erhältst, wenn du eine OR-abfrage startest, denn nur dann sucht sql alle einträge des feldes 'kurse' in denen er entweder 'kurs1' oder 'kurs2' vorfindet. beides gleichzeitig wird ja nicht eingetragen sein. hoffe ich halt! ;)

mit AND-verknüpfungen reiht man bedingungen aus mehreren feldern, welche gleichzeitig zutreffen sollen.

dein 2. OR-problem ist logisch: sobald eine person mehrere kurse besucht hat, dann taucht sie im ergebnis eben so oft auf, wie sie kurse besucht hat

ps: grüße in die heimat von wilhelm tell! ;)


Nakisu - Mo 31.01.05 20:11

Heyho

Das heisst, ich kann das Problem nicht mit SQL lösen... :(
Werd mir was anderes überlegen.
Aber herzlichen Dank für all die Antworten - gelernt hab ich trotzdem einiges.

LG
Nakisu

ps. Danke :lol:


grayfox - Mo 31.01.05 20:49

Zitat:
Das heisst, ich kann das Problem nicht mit SQL lösen...

na, das hab ich aber nicht behauptet...

wenn dir gleich ist, wieviele kurse ein teilnehmer besucht hat, dann frag nach

Quelltext
1:
 kurse not NULL                    

ab.
untested & ohne gewähr.. (ja, auch ohne armbrust ;) )


Nakisu - Mo 31.01.05 21:05

hm... kurse not NULL würde bedeuten, dass eine Person ausgewählt wird, wenn sie mindestens einen Kurs besucht hat - aber egal welchen?

ich ziehe sowieso Schwerter vor :D


grayfox - Mo 31.01.05 21:10

nein, vergiss es wieder - damit bekommst du jeden kursteilnehmer wieder öfters, sofern er mehrere kurse besucht hat :oops:

Zitat:
kurse NOT NULL

bedeutet, dass der teilnehmer mindestens einen kurs besucht haben muss, damit der im ergebnis angeführt wird, d.h. das feld 'kurs' darf nicht leer sein.

verwende lieber
Zitat:
SELECT DISTINCT
, damit bekommst du jeden datensatz nur einmal angezeigt...

ps: wie wärs mit pfeil & bogen? :wink:


Nakisu - Mi 02.02.05 09:42

Sehr schön :)
Das werd ich gleich versuchen...

Herzlichen Dank!

p.s. auch nett :D aber wenn mal alle Pfeile verschossen sind, haste pech