Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Brauche dringend Hilfe bei SQL-Abfrage! (https://www.delphipraxis.net/8323-brauche-dringend-hilfe-bei-sql-abfrage.html)

jschade 2. Sep 2003 13:00


Brauche dringend Hilfe bei SQL-Abfrage!
 
Liste der Anhänge anzeigen (Anzahl: 2)
hi leute,

hab 'n riesiges problem. komm nämlich mit ner abfrage nicht weiter.

hab bereits 2 abfragen (in access), als deren ergebnis ich die beigefügten tabellen "Soll"(schulungen, die mitarbeiter haben sollen) und "Ist"(schulungen,die mitarbeiter haben) bekomme.

jetzt will ich die schulungen herausfiltern, die die mitarbeiter noch besuchen müssen...

bekomme aber die abfrage nicht hin. kann mir da evtl. jemand von den datenbank-profis zur seite stehen?

mfg jan

Leuselator 2. Sep 2003 13:47

Re: Brauche dringend Hilfe bei SQL-Abfrage!
 
Dein Datenbankmodell scheint nicht so prall zu sein.

Ich sehe in Schulungen_Ist eine ID 245 mit gleichem Namen
wie in Schulungen_Soll die mit ID 215.

Ok - kann Zufall sein oder ist die selbe gemeint?

Vorschlag

Tabelle 1: Schulungen
Felder: IdSchulungen,Bezeichnung etc.
Feld IDSchulungen als AutoIncrement (oder wie auch immer das in Access heisst)

Tabelle 2: Mitarbeiter
Felder: IdMitarbeiter,Name, etc
Feld IdMitarbeiter wieder Typ AutoIncrement

Tabelle 3: SchulungsSoll
Felder: IdSchulungsSoll,IdMitarbeiter,IdSchulungen,Termin. (Ende!)

Tabelle 4: SchulungsIst
Felder: IdSchulungsIst,IdMitarbeiter,IdSchulungen,Termin. (Ende!)

Dann kannst Du mit:
SQL-Code:
    select MA.*,
           S.Bezeichnung,
           SS.Termin
      from Mitarbeiter MA
inner join SchulungsSoll SS
        on SS.IdMitarbeiter = MA.IdMitarbeiter
inner join Schulungen S
        on S.IdSchulungen = SS.IdSchulungen
alle Mitarbeiter herausholen, die für Schulungen vorgesehen sind.
Willst Du z.B. nur einen Termin haben dann fügst Du hinten dran:
SQL-Code:
     where SS.Termin = 'Tag.Monat.Jahr'
Alle Mitarbeiter, die schon fertig haben bekommst Du mit

SQL-Code:
    select MA.*,
           S.Bezeichnung,
           SI.Termin
      from Mitarbeiter MA
inner join SchulungsIst SI
        on SI.IdMitarbeiter = MA.IdMitarbeiter
inner join Schulungen S
        on S.IdSchulungen = SS.IdSchulungen
Den SchulungsStand des Mitarbeiters Nr 15 (Soll und Ist) erhältst Du z.B. so:
SQL-Code:
         select S.Bezeichnung,
                SS.Termin as Geplant,
                SI.Termin as Absolviert
           from Mitarbeiter MA
     inner join SchulungsIst SS
             on SS.IdMitarbeiter = MA.IdMitarbeiter
     inner join Schulungen S
             on S.IdSchulungen = SS.IdSchulungen
left outer join SchulungsIst SI
             on SI.IdMitarbeiter = MA.IdMitarbeiter
          where MA.IdMitarbeiter = 15
Das ganze funzt, wenn Access ANSI-SQL mitmacht.

Gruss

malloc 2. Sep 2003 13:48

Re: Brauche dringend Hilfe bei SQL-Abfrage!
 
Ich Müsste jetzt mal genau die Statements sehen, aber ich denke es geht mit NOT EXISTS.

z.B. so:

Code:
SELECT Soll.Schulung_ID
FROM Soll
WHERE NOT EXISTS
(SELECT Ist.Schulung_ID FROM Ist WHERE Ist.Schulung.ID = Soll.Schulung_ID)
Ich denke das sollte dir als Beispiel weiterhelfen.

jschade 2. Sep 2003 14:21

Re: Brauche dringend Hilfe bei SQL-Abfrage!
 
Zitat:

Zitat von Leuselator
Dein Datenbankmodell scheint nicht so prall zu sein.

Ich sehe in Schulungen_Ist eine ID 245 mit gleichem Namen
wie in Schulungen_Soll die mit ID 215.

Ok - kann Zufall sein oder ist die selbe gemeint?

sieht auf den ersten blick so aus, könnte jemand mit mehr erfahrungen als ich mit sicherheit auch beweisen.

die tabellen sind wie gesagt ergebnisse aus abfragen. ich habe schulungen mit gleichem namen, aber mit mehreren verschiedenen terminen pro schulungsname, deshalb auch verschiedene ID's. aus diesem grund muss ich den abgleich auch über den namen finden, da die ID hier nicht eindeutig ist...

muss mir mal deinen tipp weiter anschauen, kann aber ein wenig dauer, bin nicht so das sql-ass :wink:

jschade 2. Sep 2003 14:45

Re: Brauche dringend Hilfe bei SQL-Abfrage!
 
Zitat:

Zitat von malloc
Ich Müsste jetzt mal genau die Statements sehen, aber ich denke es geht mit NOT EXISTS.

mmhh...

also mit dieser abfrage bekomme ich die werte, die in beiden tabellen vorkommen...

Code:
SELECT Soll.MA_ID, Ist.Name
FROM Ist, Soll
WHERE (((Ist.MA_ID)=[Soll].[MA_ID]) AND ((Ist.Name)=[Soll].[Name]));
... im beispiel wären das:

MA_ID = 1
Name = Konfliktmanagement

... d.h. mein mitarbeiter mit der ID = 1 braucht die Schulung Konfliktmanagement und hat diese auch schon absolviert.

Jetz brauch ich aus der Tabelle "Soll" alle einträge ausser denen wo MA_ID und Name mit dem ergebnis meiner abfrage übereinstimmen. wichtig!: ich brauch das alles in einer abfrage :cry:

Leuselator 2. Sep 2003 15:25

Re: Brauche dringend Hilfe bei SQL-Abfrage!
 
SQL-Code:
select * 
  from Mitarbeiter MA,
       Soll S
where MA.MA_ID = S.MA_ID
  and MA.MA_ID not in (SELECT Soll.MA_ID
                         FROM Ist, Soll
                        WHERE (
                              (
                              (Ist.MA_ID)=[Soll].[MA_ID]
                              ) AND (
                              (Ist.Name)=[Soll].[Name])
                              )
                       )
Macht Access das mit?

jschade 2. Sep 2003 15:26

Re: Brauche dringend Hilfe bei SQL-Abfrage!
 
i hob's :dancer:

also mit dieser abfrage bekomme ich nur die datensätze, die in der Soll- aber nicht in der Ist-Tabelle vorkommen:

Code:
SELECT Soll.MA_ID, Soll.Name
FROM Soll LEFT JOIN Ist ON (Soll.Name = Ist.Name) AND (Soll.MA_ID = Ist.MA_ID)
WHERE (((Ist.Name) Is Null));
trotzdem vielen dank für eure bemühungen...


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