首页 > 解决方案 > SQL - 框内查找框

问题描述

假设我有一张如下表:

CREATE TABLE boxes (
    box_id TEXT PRIMARY KEY,
    x1 INTEGER,
    x2 INTEGER,
    y1 INTEGER,
    y2 INTEGER
)

我将如何查询以选择完全位于表中另一个框内的所有框?这是我尝试过的,但我没有得到正确的答案:

SELECT b2.box_id FROM boxes AS b1, boxes AS b2
WHERE (
    b2.x1 >= b1.x1 AND
    b2.x2 <= b1.x2 AND
    b2.y1 >= b1.y1 AND
    b2.y2 <= b1.y2
);

非常感谢任何可以将我推向正确方向的人!干杯!

标签: sqlpostgresql

解决方案


我不确定你所说的“完全在里面”是什么意思。如果您的意思是他们不能共享边界,请使用不等式

SELECT b2.box_id
FROM boxes b1 JOIN
     boxes b2
     ON b2.x1 > b1.x1 AND
        b2.x2 < b1.x2 AND
        b2.y1 > b1.y1 AND
        b2.y2 < b1.y2;

如果您的意思是它们可以共享边界但不重合,那么:

SELECT b2.box_id
FROM boxes b1 JOIN
     boxes b2
     ON b2.x1 >= b1.x1 AND
        b2.x2 <= b1.x2 AND
        b2.y1 >= b1.y1 AND
        b2.y2 <= b1.y2 AND
        NOT (b2.x1 = b1.x1 AND
             b2.x2 = b1.x2 AND
             b2.y1 = b1.y1 AND
             b2.y2 = b1.y2
            );

推荐阅读