![]() |
Datenbank: MySQL • Zugriff über: zeos lib
MySQL anfrage erstellen.
Hallo zusammen,
habe folgende scenario. TABELLE 1 Ist ne personal samlung wie z.b. PersonalNr, Name, Vorname ... TABELLE 2 Ist Abwesenheits liste ( Urloub, Dienstreise, Krank ... ) PersonalNr, Datum_von, Datum_bis ... Versuche jezt anfrage erstellen die mir auflistet Mitarbeiter die am Datum zur verfügung stehen. Er solle alle Leute auflisten die nicht Krank, Urlaub etc. sind. Habe versucht mit SELECT a.*, b.Pnr, b.Datum_von, b.Datum_bis FROM (personal a) LEFT JOIN abw_liste b ON (a.pnr=b.pnr) WHERE b.datum_von<="2008-11-02" AND b.datum_bis>="2008-10-27" ... Leider komm ich nicht zur gewünschten ergebnis. Er listet mir entweder die leute auf die nicht dar sind oder garnichts. Kann mir jemand helfen ? mfg shifter |
Re: MySQL anfrage erstellen.
Datum_von muss doch kleiner sein als Datum_bis, oder nicht? Versuch es mal so:
SQL-Code:
SELECT P.*
FROM Personal P LEFT JOIN Abwesenheit A ON A.PersonalNr = P.PersonalNr AND A.Datum_von >= '2008-11-02' AND A.Datum_bis <= '2008-11-05' WHERE A.PersonalNr IS NULL |
Re: MySQL anfrage erstellen.
Ich bin mir nicht sicher, aber DeddyHs Vorschlag müsste falsch sein.
Bei einem Fehlzeitraum 2008-11-03 bis 2008-11-07 ergibt sich aus
SQL-Code:
A.Datum_von >= '2008-11-02'
AND A.Datum_bis <= '2008-11-05'
SQL-Code:
Damit wäre beim LEFT OUTER JOIN A.PersonalNr = NULL.
TRUE
AND FALSE = FALSE Der Mitarbeiter würde also selektiert werden, obwohl er nicht einsetzbar wäre. Vorgehensweise:
Code:
Mein Vorschlag:
Gib mir alle Spalten
aus Tabelle Personal wo PersonalNr nicht in ( Gib mir alle PersonalNr aus Abwesenheitsliste wo Einsatzzeitraum in Fehlzeitraum fällt )
SQL-Code:
Übrigens solltest du Projektionen immer ausschreiben, also nicht den *-Operator nutzen.
SELECT P.*
FROM Personal P WHERE P.PersonalNr != ALL ( SELECT PersonalNr FROM abw_liste WHERE ( datum_von>=VON_WANN AND datum_von<=BIS_WANN ) OR ( datum_bis>=VON_WANN AND datum_bis<=BIS_WANN ) ) LG, Xong PS: Ich hoffe, ich habe keine Fehler gemacht. :duck: |
Re: MySQL anfrage erstellen.
OK, an Überlappung hab ich nicht gedacht. Dann mal anders formuliert (irgendein Vorschlag wird dann ja mal hoffentlich der richtige sein):
SQL-Code:
SELECT P.*
FROM Personal P LEFT JOIN Abwesenheit A ON A.PersonalNr = P.PersonalNr AND ( A.Datum_von BETWEEN '2008-11-02' AND '2008-11-05' OR A.Datum_bis BETWEEN '2008-11-02' AND '2008-11-05' OR (A.Datum_von <= '2008-11-02' AND A.Datum_bis >= '2008-11-05') ) WHERE A.PersonalNr IS NULL |
Re: MySQL anfrage erstellen.
Zitat:
Zitat:
Weiß nicht, wie MySQL damit umgeht... LG, Xong |
Re: MySQL anfrage erstellen.
Nö, wieso? Hab auch zur Kontrolle nochmal hier nachgesehen:
![]() |
Re: MySQL anfrage erstellen.
Zitat:
|
Re: MySQL anfrage erstellen.
Hi leute ,
bin gerade aus dem bett rausgekrochen :lol: Danke erstmal für eure Hilfe. @DeddyH : Versuche dein Code durchzutesten, jedoch irgend wo befindet sich noch ein hacken. Dazu aber gleich mehr. gruss shifter |
Re: MySQL anfrage erstellen.
Hi,
von wegen ein Hacken. ES FUNKTIONIERT 100%-ig. Danke Sehr für eure Mühe und Hilfe. MfG Sebastian Launer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 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-2025 by Thomas Breitkreuz