Re: Box query
From: J M Davitt <jdavitt_at_aeneas.net>
Date: Sat, 22 Apr 2006 02:31:09 GMT
Message-ID: <Nzg2g.4791$YI5.515_at_tornado.ohiordc.rr.com>
>
> select b1.id as box1, b2.id as box2
> from boxes b1, boxes b2
> where b1.id < b2.id
> and not exists (
> select 1 from boxes b3, boxes b4
> where b3.id = b1.id
> and b4.id = b2.id
> and b4.dimension# = b3.dimension#
> and (b4.high < b3.low or b4.low > b3.high)
> )
> group by 1, 2
> ;
Date: Sat, 22 Apr 2006 02:31:09 GMT
Message-ID: <Nzg2g.4791$YI5.515_at_tornado.ohiordc.rr.com>
Bob Badour wrote:
> Mikito Harakiri wrote:
>
>> Mikito Harakiri wrote: >> >>> Given a set of n-dimensional boxes >>> >>> table boxes ( >>> dimension# integer, >>> low integer, >>> high integer >>> ) >>> >>> find all the pairs that intersect... >> >> >> >> And those pairs supposed to be what? Right, box ids: >> >> table boxes ( >> *id* integer, >> dimension# integer, >> low integer, >> high integer >> ) >>
>
> select b1.id as box1, b2.id as box2
> from boxes b1, boxes b2
> where b1.id < b2.id
> and not exists (
> select 1 from boxes b3, boxes b4
> where b3.id = b1.id
> and b4.id = b2.id
> and b4.dimension# = b3.dimension#
> and (b4.high < b3.low or b4.low > b3.high)
> )
> group by 1, 2
> ;
Excellent! "not exists (no overlaps)." I like it. I was
thinking "exists (all overlap)."
I think
and (b4.high <= b3.low or b4.low >= b3.high)
prevents responses where the boxes abut each other; although
not stated, I don't think that sharing part of an edge - even
a single point - means that boxes intersect. I'm guessing
the volume of the intersection s/b > 0.