<code> Det borde gå såhär... Har inte testat så det kan vara helt fel, svårt att negera villkor... Jag tycker inte att det skulle behövas vare sig någon nästlad select eller join: Jag kom fram till det här enkla: Jo men... avresa och ankomst befinner sig i en annan tabell som har namnet rumbokning där rumnummret kopplas till ett bokningsnummer samt en ankomst och avresa läggs. Oj, det hann jag glömma bort.Hjälp med SQL-sats.
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')
)
</code>Kan jag på något sätt korta ner denna SQL-sats så att den utför sitt uppdrag ialla fall?Sv: Hjälp med SQL-sats.
<code>SELECT DISTINCT rum.rumnr
FROM rum INNER JOIN rumbokning ON rum.rumnr = rumbokning.rumnr
WHERE NOT (
NOT (
rumbokning.Ankomst BETWEEN '2003-12-01' AND '2003-12-06' OR rumbokning.Avresa BETWEEN '2003-12-01' AND '2003-12-06'
)
) AND (
NOT (
rumbokning.Ankomst < '2003-12-01' AND rumbokning.Avresa > '2003-12-06'
)
)</code>
/JohanSv: Hjälp med SQL-sats.
<code>
SELECT rum.rumnr
FROM rum
WHERE NOT (
(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')
)
</code>
Sedan kan man nog leka litet med villkoret, men om man hamnar på något effektivare är jag osäker på.Sv: Hjälp med SQL-sats.
<code>
SELECT rumnr
FROM rum
WHERE Ankomst > '2003-12-06' OR Avresa < '2003-12-01'
</code>
Med andra ord vill du ha ut de som inte är inbokade någon gång under de sex dagarna mellan '2003-12-01' och '2003-12-06'.
Eftersom jag antar att Avresa > Ankomst alltid gäller, blir det så här enkelt.Sv: Hjälp med SQL-sats.
Sv: Hjälp med SQL-sats.
<code>
SELECT rumnr
FROM rum INNER JOIN rumbokning USING (rumnr)
WHERE Ankomst > '2003-12-06' OR Avresa < '2003-12-01'
</code>