子查询中的 SQL 多个别名

标签 sql postgresql postgis

我有一个设置,我想在空间查询中支持用户定义的子查询以识别重叠的多边形。下面是一个例子:

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

以上是有效的,但我更规范的方法是存在的。

内部查询在这里完全是任意的,重要的是我使用相同的查询定义 i1i2。我这样做是为了让我有 i1i2 外部空间查询的别名。

是否需要执行两次内部查询或是否有更好的方法来创建 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/

相关文章:

mysql - mysql中的sum比group by

php - 从 MySQL 列获取唯一值

swift - 数据库不存在 - 使用 Vapor 3 和 Fluent 的服务器端 Swift 中的 PostgreSQL

sql - Oracle 中的复杂左外连接,转换为 PostgreSQL

postgresql - 亚马逊 RDS : Thousands of PostGIS debugging messages appearing in my logs

java - 在 spring boot 中使用 PostGIS 地理点和 hibernate spatial 5

python - SQLAlchemy:带有 load_only、order_by 和 limit 的无效 SQL

mysql - 如果用户喜欢该帖子,则获取线程的帖子和 0 或 1

sql - Mysql 更改分隔符以获得更好的 SQL INJECTION 处理?

sql - PostgreSQL - 键索引