evo s joinom... nije bas lijepo, ali bas me zanima kako ce radit.. ako ti se da izvrtit onaj test sa puno podataka
select distinct apartman.apartmanId
from apartman left join zauzetost on zauzetost.apartmanid = apartman.apartmainid and ('1/12/2011' <= do AND od <= '1/22/2011')
where do is null
dakle malo objasnjenje kako radi bi vjerojatno bilo korisno... kaze ovako.. uzmi sve apartmane i joinaj sa nekim i zauzetosti s kojim se sijece... ako ne mozes nac takav onda radi left joina joinaj sa null
e sad.. svi apartmani koji su joinani sa null nemaju niti jednu rezervaciju u tom terminu inace bi se s njom joinali... pa where do is null filtrira slobodne apartmane
Sada daje točne rezultate na malom i velikom uzorku, ali se tvoj join vrti 97,5ms, a moj/mrkačev subselect 35,1ms. To je ~300% sporije za JOIN na 10k apartmana i 120k rezervacija. Tako reagira SQL Server 2008R2. Možda bi MySQL bio drugačiji.