Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi sql abfrage (https://www.delphipraxis.net/110470-sql-abfrage.html)

Delphi-Phil 18. Mär 2008 14:41

Datenbank: MySql • Zugriff über: ADO

sql abfrage
 
Hallo,


ich habe folgende SQL Abfrage:
SQL-Code:
SELECT vorname, nachname, fach
FROM schüler s
INNER JOIN schuelerfaecher sf
  ON s.id = sf.id_schueler
LEFT JOIN fächer f
  ON sf.id_fach = f.id
WHERE NOT EXISTS (SELECT *
                  FROM zeugnis
                  WHERE id_schueler = s.id
                    AND id_fach = sf.id_fach)
Die Abfrage funktioniert auch super. Jetzt habe ich aber eine Sache die ich noch zufügügen muss, es soll nur bei den Schülern aus einer bestimmten Klasse gesucht werden. Die Schüler sind in der Tabelle "SchülerKlasse" (ID, IDSchüler, IDKlasse) verbunden. In der Tabelle SchülerFächer ist auch das Feld KlasenID vorhanden, dort wird die Klasse gespeichert in der der Schüler das Fach hat.


Gruß Phil

DeddyH 18. Mär 2008 14:50

Re: sql abfrage
 
Ohne Gewähr:
SQL-Code:
SELECT vorname, nachname, fach
FROM schüler s
INNER JOIN schuelerklasse sk
  ON sk.id_schueler = s.id
INNER JOIN schuelerfaecher sf
  ON sf.id_klasse = sk.id_klasse
LEFT JOIN fächer f
  ON sf.id_fach = f.id
WHERE sk.id = :gesuchte_klasse
AND NOT EXISTS (SELECT *
                  FROM zeugnis
                  WHERE id_schueler = s.id
                    AND id_fach = sf.id_fach)

Delphi-Phil 18. Mär 2008 14:54

Re: sql abfrage
 
danke,

jetzt habe ich eins vergessen, könntest du es so ändern das er für die gesammte abfrage nur die schüler nimmt die aus einer bestimmten sind. Jetzt zum testen vllt mal die Klasse mit der ID 1.


Gruß Phil

DeddyH 18. Mär 2008 14:57

Re: sql abfrage
 
Ersetz doch einfach :gesuchte_klasse durch 1 ;)

Delphi-Phil 18. Mär 2008 15:09

Re: sql abfrage
 
Liste der Anhänge anzeigen (Anzahl: 2)
es kommen zu viele einträge raus.

ich habe zwei bilder angehangen, einmal falsch einmal richtig. das richtige ist ohne den klassenzusatz im sql code gemacht.


gruß Phil

Delphi-Phil 18. Mär 2008 15:23

Re: sql abfrage
 
hat denn keiner mehr eine idee???


Gruß Phil

DeddyH 18. Mär 2008 15:25

Re: sql abfrage
 
Wenn Du noch 1 1/2 Stunden warten kannst, schau ich zu Hause nochmal drüber.

Delphi-Phil 18. Mär 2008 15:27

Re: sql abfrage
 
okay das wäre sehr lieb.

Vielen Dank, bis nachher...


Gruß Phil

DeddyH 18. Mär 2008 16:53

Re: sql abfrage
 
Hmm... wenn es so auch nicht funktioniert, muss ich mir mal eine Zeichnung machen.
SQL-Code:
SELECT vorname, nachname, fach
FROM schüler s
INNER JOIN schuelerklasse sk
  ON sk.id_schueler = s.id
INNER JOIN schuelerfaecher sf
  ON sf.id_klasse = sk.id_klasse
  AND sf.id_schueler = s.id
LEFT JOIN fächer f
  ON sf.id_fach = f.id
WHERE sk.id = :gesuchte_klasse
AND NOT EXISTS (SELECT *
                  FROM zeugnis
                  WHERE id_schueler = s.id
                    AND id_fach = sf.id_fach)

Delphi-Phil 18. Mär 2008 16:56

Re: sql abfrage
 
danke
ich teste es gleich, bin grade unterwes...bis heute abend!

Gruß Phil

omata 18. Mär 2008 18:39

Re: sql abfrage
 
Der LEFT JOIN war nur ein Test (gestern, anderer Thread)...

SQL-Code:
SELECT vorname, nachname, fach
FROM schüler s
INNER JOIN schuelerfaecher sf
  ON s.id = sf.id_schueler
INNER JOIN fächer f
  ON sf.id_fach = f.id
INNER JOIN schülerklassen sk
  ON s.id = sk.id_schueler
WHERE id_klasse = :id_klasse
  AND NOT EXISTS (SELECT *
                  FROM zeugnis
                  WHERE id_schueler = s.id
                    AND id_fach = sf.id_fach)
Gruss
Thorsten

DeddyH 18. Mär 2008 18:47

Re: sql abfrage
 
Es wäre nett gewesen, auf den anderen Thread zu verlinken :?

Delphi-Phil 18. Mär 2008 19:13

Re: sql abfrage
 
sry ist mir auch grade eingefallen. ich hätte es verlinken sollen...

Welchen SQL Code soll ich denn jetzt testen?? Den hier?ß

SQL-Code:
SELECT vorname, nachname, fach
FROM schüler s
INNER JOIN schuelerfaecher sf
  ON s.id = sf.id_schueler
INNER JOIN fächer f
  ON sf.id_fach = f.id
INNER JOIN schülerklassen sk
  ON s.id = sk.id_schueler
WHERE id_klasse = :id_klasse
  AND NOT EXISTS (SELECT *
                  FROM zeugnis
                  WHERE id_schueler = s.id
                    AND id_fach = sf.id_fach)
gruß Phil

Delphi-Phil 18. Mär 2008 19:51

Re: sql abfrage
 
also ich bin echt glücklich es funst nun...

ich habe den sql code am ende verwendet:
SQL-Code:
SELECT vorname, nachname, fach
FROM schüler s
INNER JOIN schuelerfaecher sf
  ON s.id = sf.id_schueler
INNER JOIN fächer f
  ON sf.id_fach = f.id
INNER JOIN schülerklassen sk
  ON s.id = sk.idschueler
WHERE idklasse = :KID
  AND NOT EXISTS (SELECT *
                  FROM zeugnis
                  WHERE id_schueler = s.id
                    AND id_fach = sf.id_fach)
Es ist alles genau wie ich es mir vorgestellt habe.

Jetzt aber noch eine sache die mir eingefallen ist:
Das was wir jetzt mit der Klasse gemacht haben, könnte man das auch mit einem Fach machen?
So das er nur die Zeugnisse ausgibt, die in einer Klasse bei einem Fach fehlen. Dann hat der User die Option zu wählen was er haben will!


Gruß Phil

omata 18. Mär 2008 20:58

Re: sql abfrage
 
Hab doch ein bißchen Fantasie, natürlich geht das. Wieso auch nicht...

SQL-Code:
SELECT vorname, nachname, fach
FROM schüler s
INNER JOIN schuelerfaecher sf
  ON s.id = sf.id_schueler
INNER JOIN fächer f
  ON sf.id_fach = f.id
INNER JOIN schülerklassen sk
  ON s.id = sk.idschueler
WHERE idklasse = :KID
  AND sf.id_fach = :FID
  AND NOT EXISTS (SELECT *
                  FROM zeugnis
                  WHERE id_schueler = s.id
                    AND id_fach = sf.id_fach)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz