Delphi-PRAXiS

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

Delphi-Phil 17. Mär 2008 21:10

Datenbank: MySql • Zugriff über: ADO

sql abfrage - tabellen vergleichen
 
Hallo Delphianer,

Ich habe folgendes Problem:

ich benötige eine SQL Abfrage die mir aus einer Datenbank ausgibt, welche Zuegnisse von einem Schüler noch nicht geschrieben worden sind.

Es gibt folgende Tabellen:

Schüler - ID, Vorname, Nachname, usw, usw

Klassen - ID, Klassenname

SchülerKlassen - ID, IDSchüler, IDKlasse

SchülerFächer - ID, IDSchüler, IDKlasse, IDFach

Zeugnisse - ID, IDSchüler, IDKlasse, IDFach, Note, Zeugnistext


Reicht das an Infos?? Ich bin für alle Hilfen dankbar...


Gruß Phil

omata 17. Mär 2008 21:48

Re: sql abfrage - tabellen vergleichen
 
SQL-Code:
SELECT *
FROM schüler s
INNER JOIN schülerfächer sf
  ON s.id = sf.idschüler
WHERE NOT EXISTS (SELECT *
                  FROM zeugnisse
                  WHERE idschüler = s.id
                    AND idfach = sf.id)
Gruss
Thorsten

Delphi-Phil 17. Mär 2008 21:50

Re: sql abfrage - tabellen vergleichen
 
vielen dank, ich werde es sofort testen!!


Ich melde mich dann ob es funst...danke!


Gruß Phil

Delphi-Phil 17. Mär 2008 22:11

Re: sql abfrage - tabellen vergleichen
 
hallo ich habe die abfrage ausprobiert...sie funst!

jetzt muss man irgendwie rausfinden ob die daten die zurückkommen stimmen... nur wie??


Gruß Phil

Delphi-Phil 17. Mär 2008 22:22

Re: sql abfrage - tabellen vergleichen
 
ich habe meine datenbank jetzt mal mit nur 3 datensätzen getestet und siehe da es funst. vielen dank erstmal!


Jetzt muss am ende aber folgendes raus kommen: der name von dem schüler und das fach wo das zeugnis fehlt.

Jetzt kommt ja nur die Fach ID raus!


gruß Phil

omata 17. Mär 2008 22:24

Re: sql abfrage - tabellen vergleichen
 
Was sollte am Ergebnis nicht stimmen? Ich verstehe das Problem nicht.
Deshalb benutzt man doch eine Datenbank, da macht man ein paar Stichproben und wenn das ok ist dann sollte das stimmen.
Außerdem ist diese Abfrage nun wirklich nicht kompliziert, das kann man doch leicht überblicken.

Edit: Wo sind die existierenden Fächer gespeichert?

Verwunderte Grüsse
Thorsten

Delphi-Phil 17. Mär 2008 22:27

Re: sql abfrage - tabellen vergleichen
 
also erstmal sry. das was raus kommt stimmt natürlich, ich habe mich ein bissel doof ausgedrückt.

In dem Datensatz der jetzt raus kommt, steht der name von dem schüler und die id von dem fach zu dem das zeugnis fehlt. Es müsste nur statt der id zu dem fach noch der fachname raus kommen.


gruß Phil

omata 17. Mär 2008 22:28

Re: sql abfrage - tabellen vergleichen
 
Wo sind die existierenden Fächer gespeichert?

Delphi-Phil 17. Mär 2008 22:29

Re: sql abfrage - tabellen vergleichen
 
in der tabelle fächer

omata 17. Mär 2008 22:32

Re: sql abfrage - tabellen vergleichen
 
Das hast du oben nicht definiert!

Vielleicht so...
SQL-Code:
SELECT vorname, nachname, fachname
FROM schüler s
INNER JOIN schülerfächer sf
  ON s.id = sf.idschüler
INNER JOIN fächer f
  ON sf.idfach = f.idfach
WHERE NOT EXISTS (SELECT *
                  FROM zeugnisse
                  WHERE idschüler = s.id
                    AND idfach = sf.id)

Delphi-Phil 17. Mär 2008 22:46

Re: sql abfrage - tabellen vergleichen
 
ich habe es nochmal auf meine gegebenheiten von den feldnamen her angepasst, jedoch kommt kein ergebnis zurück. es kommt aber auch kein fehler!

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
WHERE NOT EXISTS (SELECT *
                  FROM zeugnis
                  WHERE id_schueler = s.id
                    AND id_fach = sf.id_fach)
Gruß Phil

omata 17. Mär 2008 22:50

Re: sql abfrage - tabellen vergleichen
 
Hast du in deiner Datenbank auch Constraints zwischen den Tabellen eingerichtet?

Ist die Tabelle "Fächer" eventuell leer bzw. enthält sie nicht alle Fächer?

Diese Problematik kann nicht eintreten, wenn die Constraints gesetzt sind.

Delphi-Phil 17. Mär 2008 22:51

Re: sql abfrage - tabellen vergleichen
 
die tabelle fächer ist nicht leer. es sind 3 einträge vorhanden. sonnst hätte es ja beim ersten test nicht funktioniert.

Was sind "Constraints" ??


Gruß Phil

omata 17. Mär 2008 22:56

Re: sql abfrage - tabellen vergleichen
 
Schau mal hier.

Versuch es mal so...
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)
Wenn jetzt etwas ausgegeben wird und die Spalte "fach" NULL liefert, dann fehlt das jeweilige Fach in der Tabelle "fächer" und du hast keine Constraints gesetzt.

Gruss
Thorsten

Delphi-Phil 17. Mär 2008 22:59

Re: sql abfrage - tabellen vergleichen
 
der code geht. es wird jedoch wieder nichts zurückgeliefert. es müsste ein eintrag raus kommen, da ein zeugnis fehlt!


gruß Phil

omata 17. Mär 2008 23:02

Re: sql abfrage - tabellen vergleichen
 
Dann machst du irgendeinen Denkfehler.

Ist dieses fehlende Fach eines Schülers auch in seinen Fächern (schuelerfaecher) eingetragen?

Edit: Kannst du nicht mal dein Beispiel zeigen?

Delphi-Phil 17. Mär 2008 23:08

Re: sql abfrage - tabellen vergleichen
 
die erste abfrage hat ja funktioniert, die änderung ist ja eientlich nur, dass statt der fach id bei dem fehlenden zeugnis der fachname stehen soll.(Denkfehler schließe ich deswegen aus)

was für ein beispiel soll ich dir zeigen??


Gruß Phil


Zitat:

Ist dieses fehlende Fach eines Schülers auch in seinen Fächern (schuelerfaecher) eingetragen?
Ja ist es!

omata 17. Mär 2008 23:11

Re: sql abfrage - tabellen vergleichen
 
Die erste Abfrage geht immer noch?
Dann kann es nur an der Tabelle "fächer" liegen.
Du must da selber reinkriechen und Fehlersuche machen, ich kann das von hier nicht sehen.
Reduziere das Problem auf eine Person und schau dir die entsprechenden Zeilen in den einzelnen Tabellen mal genau an.

Delphi-Phil 17. Mär 2008 23:12

Re: sql abfrage - tabellen vergleichen
 
ich bastel mir nochmal die erste abfrage!


soll ich dir per vnc mal meine anwendung zeigen?Hilft das evtl.?

omata 17. Mär 2008 23:15

Re: sql abfrage - tabellen vergleichen
 
Kannst du nicht für eine Person mal die Zeilen der Tabellen zeigen (Namen kannst du ja ändern)

Delphi-Phil 17. Mär 2008 23:26

Re: sql abfrage - tabellen vergleichen
 
ich bekomme die erste abfrage nicht mehr zum laufen... es ist glaube ich schon ein bissel spät...

würdest du mir morgen nochmal helfen??


gruß Phil

omata 17. Mär 2008 23:31

Re: sql abfrage - tabellen vergleichen
 
Aber die erste Abfrage müsste doch diese gewesen sein...
SQL-Code:
SELECT *
FROM schüler s
INNER JOIN schuelerfaecher sf
  ON s.id = sf.id_schueler
WHERE NOT EXISTS (SELECT *
                  FROM zeugnis
                  WHERE id_schueler = s.id
                    AND id_fach = sf.id_fach)
Liefert die kein Ergebnis? Hast du Zeilen in deiner Datenbank verändert?

Sonst gehts morgen weiter...

Delphi-Phil 17. Mär 2008 23:33

Re: sql abfrage - tabellen vergleichen
 
mir ist ein ganz übler fehler passiert warte mal...

ich habe durch irgendeinen dummen entf klick auf der tastertur die qry aus meinem dataset rausgenommen... jetzt teste ich nochmal mit dem neuen code...
poste den nochmal bitte...

Delphi-Phil 17. Mär 2008 23:36

Re: sql abfrage - tabellen vergleichen
 
alles funst!!! SUPER GEIL!!


DANKE FÜR DEINE HILFE... SRY FÜR MEINEN DUMMEN FEHLER!!

lass morgen nochmal schreiben, dann erkläre ich dir das!


Gute nacht und schlaf gut


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 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