Gyorsabb lekérdezés
Sziasztok, az lenne a kérdésem, hogy mi az optimális lekérdezés az alábbi adatok alapján. Azokra az epületekre lenne szükségem, ahol egy adott időintervallumban (:start, :stop) nincs tanítási óra. Köszönöm!Ez van jelenleg:
■ iskola: idiskola
terem: idterem, idepulet
tanora: idterem, start, stop
SELECT idiskola FROM iskola WHERE idiskola NOT IN (
SELECT idiskola FROM iskola INNER JOIN terem USING (idiskola) INNER JOIN ora USING (idterem)
WHERE :start BETWEEN start AND stop OR :stop BETWEEN start AND stop OR :start < start AND stop > :stop)
Kedves Mahoo!Nem tudom,
Nem tudom, hogy a végrehajtás szempontjából van-e lényeges különbség a kettő között, de ha szeretnéd kidobni a subselectet, akkor ugyanezt így is felírhatnád, JOIN-ok segítségével:
Üdv:
Dávid
Kérhetnék még egy kis
http://sqlfiddle.com/#!2/8a42fe/2
Illetve szerintem csak elírtad, és nem
csak egy kis logika :D
!(A || B) = !A && !B
tehát
(:start > start && :start < stop) ||
(:stop > start && :stop < stop) ||
(:start < start && :stop > stop)
ezt kell negálnod (az ellentettjét venned)
!(:start > start && :start < stop) &&
!(:stop > start && :stop < stop) &&
!(:start < start && :stop > stop)
a külön részekre is alkalmazva a szabályt
(:start <= start || :start >= stop) &&
(:stop <= start || :stop >= stop) &&
(:start >= start || :stop <= stop)
elvileg ez az amit keresel, de azért jó lenne, ha egy aktuálisan ezt tanuló kolléga megerősítene, mert ezt most elég régi emlékek alapján vezettem le az öröm kedvéért.
ennek SQL való lefordítása gondolom nem probléma, tehát ez lesz a where feltételed. azt hiszem az is segít, ha nem where-be írod a feltételt, hanem már a JOIN-ba berakod ON-nal, hiszen ilyenkor nem kell az összeset összejoinolnia, és azt szűrni, hanem rögtön a szűrt elemek jelennek meg.
2 - 0 a LEFT JOIN is NULL-nak
Egyszerűbb feltétel
Ez tényleg egyszerűbb...
Feltételek száma
Arról nincs szó, hogyan fedhetik át egymást az időpontok, mondjuk minden megengedett. Ha feltételezem, hogy nemcsak egy órát lehet foglalni - az intervallumos tárolás ezt megengedi - akkor az átfedéseket négy vizsgálattal lehet kiszűrni. (Két feltétel kevés, a három érthetetlen.)
1. és 2. feltétel, az időpont kérés kezdete vagy vége tanítási időre esik. Ez bármilyen kombinációban kizáró ok.
Csak annak tűnik. :)
Ravasz
Valaki esetleg rá nézne erre,
LEFT JOIN
A feltételt átrendeztem éles eszű barátunk magyarázata szerint. (4. 8.)
A lényeg, az IS NULL feltétel a tanora-táblára alkalmazandó!
Köszönöm, jónak néz ki! Még