Har ett litet problem, vet inte riktig om det funkar att bara använda en SQL-sats till att utföra det, men jag ställer min fråga i alla fall.
Har 3 tabeller: bokningar, rumbokning och rum
bokningar
Bokningsnr | Kundnr | Bokningsdatum
rumbokning
ID | Bokningsnr | Rumnr | Ankomst | Avresa
rum
Rumnr
De attribut som är angivna är inte alla men är de som berörs av det som jag vill ha hjälp med.
Jag om jag har ett gäng med bokningar utförda på diverse rum, dessa finns i rumbokningar:
1 | BOK00001 | 112 | 2003-11-30 | 2003-12-04
2 | BOK00002 | 113 | 2003-11-30 | 2003-12-02
3 | BOK00003 | 117 | 2003-12-01 | 2003-12-14
4 | BOK00004 | 114 | 2003-12-12 | 2003-12-20
Mitt problem är, jag vill undvika dubbelbokningar, säg att en kund vill boka ett rum dessa datum: 2003-12-01 tom 2003-12-06, då är ju 112, 113, 117 upptaget, men hur kan jag göra en SQL-sats som kollar vilka rum som inte är upptagna i intervallet 2003-12-01 o 2003-12-06? :q :q
SELECT rum.rumnr
FROM rum
WHERE rum.rumnr NOT IN
(
SELECT rumnr
FROM rumbokning
WHERE
(Ankomst BETWEEN '2003-12-01' AND '2003-12-06' OR
Avresa BETWEEN '2003-12-01' AND '2003-12-06') OR
(Ankomst < '2003-12-01' AND
Avresa > '2003-12-06')
)
Hmm. Kanske lite skum wheresats där. Går nog att göra lite bättre. ;)
126 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17