Avatar billede cesil Nybegynder
12. november 2002 - 12:25 Der er 4 kommentarer og
1 løsning

Tilføjelse til Select

Jeg har lavet den her select:

SELECT    MAX_MEETINGROOM_BOOKED.dateto AS Expr1, MAX_MEETINGROOM_BOOKED.datefrom AS Expr2, MAX_MEETINGROOM.*
FROM        MAX_MEETINGROOM_BOOKED INNER JOIN
                      MAX_MEETINGROOM ON MAX_MEETINGROOM.id = MAX_MEETINGROOM_BOOKED.meetingroomid
WHERE    (MAX_MEETINGROOM_BOOKED.datefrom >= '20021111 00:00') AND (MAX_MEETINGROOM_BOOKED.dateto <= '20021111 23:59') AND
                      (MAX_MEETINGROOM_BOOKED.booked = 0) AND (MAX_MEETINGROOM.chairs - MAX_MEETINGROOM_BOOKED.bookedchairs >= 4) OR
                      (MAX_MEETINGROOM_BOOKED.datefrom >= '20021111 00:00') AND (MAX_MEETINGROOM_BOOKED.dateto <= '20021111 23:59') AND
                      (MAX_MEETINGROOM_BOOKED.booked = 0) AND (NOT ('20021111 20:45' BETWEEN MAX_MEETINGROOM_BOOKED.datefrom AND
                      MAX_MEETINGROOM_BOOKED.dateto)) AND (NOT ('20021111 23:30' BETWEEN MAX_MEETINGROOM_BOOKED.datefrom AND
                      MAX_MEETINGROOM_BOOKED.dateto))
ORDER BY MAX_MEETINGROOM.meetingname, MAX_MEETINGROOM_BOOKED.datefrom


Den finder de mødelokaler der er ledige udfra dato og tidspunkter. Mit problem er at den kun finder de mødelokaler der allerede er booket på et eller andet tidspunkt på dagen. Så hvis ikke lokalet findes i både MAX_MEETINGROOM_BOOKED og MAX_MEETINGROOM så bliver de ikke fundet.
Det skal være sådan at hvis lokalet ikke findes i MAX_MEETINGROOM_BOOKED men er i MAX_MEETINGROOM skal den med i resultatet.
Avatar billede bennytordrup Nybegynder
12. november 2002 - 12:29 #1
Lav det til et right join og test på (Max_meetingroom_booked.meetingromid is null)
Avatar billede bennytordrup Nybegynder
12. november 2002 - 12:29 #2
rettelse: right outer join
Avatar billede cesil Nybegynder
12. november 2002 - 13:19 #3
Næsten rigtigt.
Der er et lokale der ikke kommer med. Det findes i MAX_MEETINGROOM_BOOKED, bare booked en anden dag.

Sådan ser det ud nu:

SELECT    MAX_MEETINGROOM_BOOKED.dateto AS Expr1, MAX_MEETINGROOM_BOOKED.datefrom AS Expr2, MAX_MEETINGROOM.*
FROM        MAX_MEETINGROOM_BOOKED RIGHT OUTER JOIN
                      MAX_MEETINGROOM ON MAX_MEETINGROOM.id = MAX_MEETINGROOM_BOOKED.meetingroomid
WHERE    (MAX_MEETINGROOM_BOOKED.meetingroomid IS NULL) OR
                      (MAX_MEETINGROOM_BOOKED.datefrom >= '20021111 00:00') AND (MAX_MEETINGROOM_BOOKED.dateto <= '20021111 23:59') AND
                      (MAX_MEETINGROOM_BOOKED.booked = 0) AND (MAX_MEETINGROOM.chairs - MAX_MEETINGROOM_BOOKED.bookedchairs >= 4) OR
                      (MAX_MEETINGROOM_BOOKED.datefrom >= '20021111 00:00') AND (MAX_MEETINGROOM_BOOKED.dateto <= '20021111 23:59') AND
                      (MAX_MEETINGROOM_BOOKED.booked = 0) AND (NOT ('20021111 14:00' BETWEEN MAX_MEETINGROOM_BOOKED.datefrom AND
                      MAX_MEETINGROOM_BOOKED.dateto)) AND (NOT ('20021111 14:15' BETWEEN MAX_MEETINGROOM_BOOKED.datefrom AND
                      MAX_MEETINGROOM_BOOKED.dateto))
ORDER BY MAX_MEETINGROOM.meetingname, MAX_MEETINGROOM_BOOKED.datefrom
Avatar billede cesil Nybegynder
12. november 2002 - 16:09 #4
Faktisk virker det slet ikke. Hvis jeg laver en forespørgsel på en dag hvor der ikke er nogen lokaler booked så er mit resultat altid tomt.
Min select ser således ud:

SELECT    MAX_MEETINGROOM_BOOKED.dateto AS Expr1, MAX_MEETINGROOM_BOOKED.datefrom AS Expr2, MAX_MEETINGROOM.*
FROM        MAX_MEETINGROOM_BOOKED RIGHT OUTER JOIN
                      MAX_MEETINGROOM ON MAX_MEETINGROOM.id = MAX_MEETINGROOM_BOOKED.meetingroomid
WHERE    (MAX_MEETINGROOM_BOOKED.meetingroomid IS NULL) OR
                      (MAX_MEETINGROOM_BOOKED.booked = 0) AND (MAX_MEETINGROOM_BOOKED.datefrom >= '20021115 00:00') AND
                      (MAX_MEETINGROOM_BOOKED.dateto <= '20021115 23:59') AND
                      (MAX_MEETINGROOM.chairs - MAX_MEETINGROOM_BOOKED.bookedchairs >= 4) OR
                      (MAX_MEETINGROOM_BOOKED.booked = 0) AND (MAX_MEETINGROOM_BOOKED.datefrom >= '20021115 00:00') AND
                      (MAX_MEETINGROOM_BOOKED.dateto <= '20021115 23:59') AND (NOT ('20021115 12:00' BETWEEN MAX_MEETINGROOM_BOOKED.datefrom AND
                      MAX_MEETINGROOM_BOOKED.dateto)) AND (NOT ('20021115 16:00' BETWEEN MAX_MEETINGROOM_BOOKED.datefrom AND
                      MAX_MEETINGROOM_BOOKED.dateto))
ORDER BY MAX_MEETINGROOM.meetingname, MAX_MEETINGROOM_BOOKED.datefrom
Avatar billede cesil Nybegynder
13. november 2002 - 11:11 #5
Du har jo faktisk svaret på det jeg spurgte om, så pointene skal du jo ha. Tak for hjælpen. Håber også du kan hjælpe med den næste.... :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester