![]() |
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 |
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:
alle Mitarbeiter herausholen, die für Schulungen vorgesehen sind.
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 Willst Du z.B. nur einen Termin haben dann fügst Du hinten dran:
SQL-Code:
Alle Mitarbeiter, die schon fertig haben bekommst Du mit
where SS.Termin = 'Tag.Monat.Jahr'
SQL-Code:
Den SchulungsStand des Mitarbeiters Nr 15 (Soll und Ist) erhältst Du z.B. so:
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
SQL-Code:
Das ganze funzt, wenn Access ANSI-SQL mitmacht.
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 Gruss |
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:
Ich denke das sollte dir als Beispiel weiterhelfen.
SELECT Soll.Schulung_ID
FROM Soll WHERE NOT EXISTS (SELECT Ist.Schulung_ID FROM Ist WHERE Ist.Schulung.ID = Soll.Schulung_ID) |
Re: Brauche dringend Hilfe bei SQL-Abfrage!
Zitat:
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: |
Re: Brauche dringend Hilfe bei SQL-Abfrage!
Zitat:
also mit dieser abfrage bekomme ich die werte, die in beiden tabellen vorkommen...
Code:
... im beispiel wären das:
SELECT Soll.MA_ID, Ist.Name
FROM Ist, Soll WHERE (((Ist.MA_ID)=[Soll].[MA_ID]) AND ((Ist.Name)=[Soll].[Name])); 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: |
Re: Brauche dringend Hilfe bei SQL-Abfrage!
SQL-Code:
Macht Access das mit?
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]) ) ) |
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:
trotzdem vielen dank für eure bemühungen...
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)); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz