Autor Beitrag
Nakisu
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 30.01.05 13:28 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: 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

_________________
mfg, stefan
Nakisu Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: 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
ausblenden 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
ausblenden Quelltext
1:
SELECT * FROM Tabellenname					

_________________
mfg, stefan
Nakisu Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: 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! ;)

_________________
mfg, stefan
Nakisu Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: 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
ausblenden Quelltext
1:
 kurse not NULL					

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

_________________
mfg, stefan
Nakisu Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: 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:

_________________
mfg, stefan
Nakisu Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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