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 :)
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
raziel: 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
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:
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
, 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!