Common Table 表达式 - 如何在 PostGIS 函数中使用结果

Common Table Expression - how to use result in PostGIS Function

我想在 PostGIS 函数 (ST_DWithin()) 中使用 CTE 的结果 (foo) 作为函数参数 (foo.geom)。

WITH foo AS (
    SELECT geom FROM bar WHERE name = 'cat'
) SELECT name FROM whatever
    WHERE ST_DWithin( 
            geom,
            foo.geom,
            10
    );

我明白了

Missing entry in FROM for table foo

并突出显示 foo.geom。 这是为什么?我将如何使用

的结果
SELECT geom FROM bar WHERE name = 'cat'

在查询中

SELECT name FROM whatever
    WHERE ST_DWithin( 
            geom,
            POINT(lng lat),
            10
    );

?

您需要在主 select 语句的 from 子句中加入 foo,以便它的列在 where 子句中可见。

看起来 就像您期待 foo CTE 中的一行,所以我希望您使用 crosslateral加入。

WITH foo AS (
    SELECT geom FROM bar WHERE name = 'cat'
)
SELECT name
FROM whatever
     cross join foo
WHERE ST_DWithin( 
            geom,
            foo.geom,
            10
    );

您的 foo CTE 未在主查询中引用。我猜你想加入它。


WITH foo AS (
    SELECT geom FROM bar WHERE name = 'cat'
) 
SELECT we.name
FROM whatever we
JOIN foo ON (ST_DWithin( we.geom, foo.geom, 10))
        ;