PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL Query Hilfääää


LIVI@HOME
2008-01-10, 21:30:04
Es ist mal wieder zum §/& , irgendwie habe ich mich festgebissen und komm nicht drauf.

Ich suche eine Query, die mir nach bzw freien Einträgen bei einer Belegungsliste sucht.

Die Belegungsliste und die dazugehörige Bezeichnungstabelle und besteht im groben aus:

TABELLE BELEGUNG
VON..........BIS...........WER
2008-01-01...2008-01-06....1
2008-01-07...2008-01-15....2
2008-01-10...2008-01-20....1

TABELLE KAPAZITAET
id.....NAME
1......Hans
2......Peter
3......Rolf


Wenn ich jetzt einen freien Mitarbeiter vom 2007-01-07 bis 2007-01-09 suche sollte das Ergebnis

Hans
Rolf
bzw 1 & 3 heraus kommen.
Vielleicht denke ich die ganze Zeit in die falsch Richtung und benötige nur einen Anschubser:confused:. Aber wie in diesem Beispiel steht "Rolf" ja nicht in der Belegungstabelle und deswegen bekomme ich Ergebnisse die komplett frei sind überhaupt nicht.
Bidde help me

darph
2008-01-10, 21:37:29
select kapazitaet.name from kapazität, belegung
where … (hier die Bedingungen, die feststellen, ob der Mitarbeiter überhaupt frei ist)
and kapazität.id = belegung.id;

LIVI@HOME
2008-01-10, 22:03:07
hmm, netter Versuch. Danke, aber geht so nicht.

Ich bekomme damit nicht den ROLF der in der Tabelle BELEGUNG noch nicht aufgeführt ist. Angenommen ich suche jetzt für den Bereich 2007-01-08 bis 2007-01-09 einen freien Mitarbeiter

select kapazitaet.name from kapazitaet , belegung
where (bis< 2008-01-08 and von> 2008-01-09)
and kapazitaet.id = belegung.id;

Und wo ich gerade ein Denkproblem habe ist mit der Tatsache, dass die Tabelle ja grundsätzlich Einträge hat, die keine Belegung (im Zeitraum) haben, aber andere Zeilen des selben Mitarbeiters schon.

Müsste ich dann nicht den COUNT von dem Mitarbeiterselect mit der NOT BETWEEN COUNT vergleichen, um herauszubekommen, dass der Mitarbeiter über die gesamte Tabelle frei ist, und nicht nur in der ersten Zeile ???
Mit der logik, würde ich den COUNT vergleichen und wenn er identisch ist, dann ist der Mitarbeiter frei. Ich denk zu kompliziert oder, das sagt meine Freundin auch immer :heul:

nefu
2008-01-11, 06:57:18
Du hast also eine Tabelle aller Mitarbeiter, und eine weitere, in der die belegten Zeiträume für Mitarbeiter eingetragen sind.
Mein Vorschlag ist :

SELECT 'Alle Mitarbeiter'
MINUS
SELECT 'Alle Mitarbeiter, die im gesuchten Zeitraum schon gebucht sind'

Gruß!

nefu

Gast
2008-01-11, 08:42:04
GENIAL...... *umarm* :) :)

Matrix316
2008-01-11, 08:44:33
select kapazität.id from kapazität where kapazität.ID not in (select belegung.wer from belegung where von > '2008-01-07' and bis < '2008-01-15') Oder? ( net ausprobiert :biggrin: )

vielleicht gehts auch mit einem join so nach dem Motto

select kapazität.id from kapazität left outer join belegung on kapazität.wer = belegung.id

oder so