我有一个设置,我想在空间查询中支持用户定义的子查询以识别重叠的多边形。下面是一个例子:
SELECT i1.id, i2.id
FROM
(SELECT * FROM Images WHERE id > 600) i1,
(SELECT * FROM Images WHERE id > 600) i2
WHERE ST_INTERSECTS(i1.footprint_latlon, i2.footprint_latlon) = TRUE
AND i1.id > i2.id
以上是有效的,但我更规范的方法是存在的。
内部查询在这里完全是任意的,重要的是我使用相同的查询定义 i1
和 i2
。我这样做是为了让我有 i1
和 i2
外部空间查询的别名。
是否需要执行两次内部查询或是否有更好的方法来创建 i1
,并且存在 i2
别名?有很多关于使用单个(强制别名)执行子查询的示例,但我没有看到任何“多别名”的示例。
最佳答案
我不认为有一个干净简单的方法来“别名”。你可以这样做:
WITH
i1 AS (SELECT * FROM Images WHERE id > 600),
i2 AS (SELECT * FROM i1)
SELECT i1.id, i2.id
FROM
i1, i2
WHERE ST_INTERSECTS(i1.footprint_latlon, i2.footprint_latlon) = TRUE
AND i1.id > i2.id
编辑 并且更好,正如@MatBailie 所建议的那样:
WITH
i AS (SELECT * FROM Images WHERE id > 600)
SELECT i1.id, i2.id
FROM
i AS i1, i AS i2
WHERE ST_INTERSECTS(i1.footprint_latlon, i2.footprint_latlon) = TRUE
AND i1.id > i2.id
关于子查询中的 SQL 多个别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49526286/