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 中的一行,所以我希望您使用 cross
或 lateral
加入。
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))
;
我想在 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 中的一行,所以我希望您使用 cross
或 lateral
加入。
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))
;