Hallo miteinander,
ich habe eine Tabelle in der ich ich ein Objekt mit einen Datum verknüpfe. Ist das Objekt mit Datum in der Tabelle gespeichert, ist es an diesen Tag nicht verfügbar.
Tabelle a
[obj_id] [datum]
1 2012-05-17
1 2012-05-31
Objekt-ID 1 ist am 17.05. und am 31.05.2012 nicht verfügbar.
Wenn ich wissen will welche Objekte im Mai verfügbar sind frage ich wie folgt:
SELECT obj.obj_id
FROM obj
WHERE NOT
EXISTS (
SELECT obj_id
FROM a
WHERE obj.obj_id = a.obj_id
AND datum >= '2012-05-01'
AND datum <= '2012-05-31'
)
Alle Objekte die in der Tabelle a keinen Eintrag im Zeitraum haben werden angezeigt.
Nun habe ich vor eine Abfrage zu schreiben in der ich Prüfen kann ob in den Zeitraum vom 01.05. bis 31.05.2012 ein Objekt sieben Tage am Stück verfügbar ist.
Ich habe mir gedacht die Abfragen in der WHERE Klausel mit einer Schleife zu erzeugen, beginnend mit
(NOT EXISTS (
SELECT obj_id
FROM a
WHERE obj.obj_id = a.obj_id
AND datum >= '2012-05-01'
AND datum <= '2012-05-07'
)
und endend mit
OR
NOT EXISTS (
SELECT obj_id
FROM a
WHERE obj.obj_id = a.obj_id
AND datum >= '2012-05-25'
AND datum <= '2012-05-31'
))
würde dann so aussehen
WHERE (NOT EXISTS(...) OR NOT EXISTS(...) usw.)
Schaut natürlich nicht so Elegant aus wenn es in der Schleife 25 mal durchgelaufen ist.
Meine Frage ist, ob es in MySQL eine andere und elegantere Möglichkeit gäbe.
ich habe eine Tabelle in der ich ich ein Objekt mit einen Datum verknüpfe. Ist das Objekt mit Datum in der Tabelle gespeichert, ist es an diesen Tag nicht verfügbar.
Tabelle a
[obj_id] [datum]
1 2012-05-17
1 2012-05-31
Objekt-ID 1 ist am 17.05. und am 31.05.2012 nicht verfügbar.
Wenn ich wissen will welche Objekte im Mai verfügbar sind frage ich wie folgt:
SELECT obj.obj_id
FROM obj
WHERE NOT
EXISTS (
SELECT obj_id
FROM a
WHERE obj.obj_id = a.obj_id
AND datum >= '2012-05-01'
AND datum <= '2012-05-31'
)
Alle Objekte die in der Tabelle a keinen Eintrag im Zeitraum haben werden angezeigt.
Nun habe ich vor eine Abfrage zu schreiben in der ich Prüfen kann ob in den Zeitraum vom 01.05. bis 31.05.2012 ein Objekt sieben Tage am Stück verfügbar ist.
Ich habe mir gedacht die Abfragen in der WHERE Klausel mit einer Schleife zu erzeugen, beginnend mit
(NOT EXISTS (
SELECT obj_id
FROM a
WHERE obj.obj_id = a.obj_id
AND datum >= '2012-05-01'
AND datum <= '2012-05-07'
)
und endend mit
OR
NOT EXISTS (
SELECT obj_id
FROM a
WHERE obj.obj_id = a.obj_id
AND datum >= '2012-05-25'
AND datum <= '2012-05-31'
))
würde dann so aussehen
WHERE (NOT EXISTS(...) OR NOT EXISTS(...) usw.)
Schaut natürlich nicht so Elegant aus wenn es in der Schleife 25 mal durchgelaufen ist.
Meine Frage ist, ob es in MySQL eine andere und elegantere Möglichkeit gäbe.
Comment