我正在编写一个Web服务端点,可以从PostgreSQL数据库中获取offices
。如果在请求中指定了ID参数,则只应返回给定region
(与该ID匹配)的办公室;否则,应该检索所有 offices
。
以下是SQL查询:
SELECT o.location
FROM (SELECT location FROM offices) AS o,
(SELECT polygon FROM regions WHERE id = NULLIF($1, '')::int) AS r
WHERE (CASE WHEN $1 = '' THEN TRUE ELSE ST_Contains(r.polygon, o.location) END)
$1
是可选的ID参数,如果请求中未提供,则默认为空字符串。 ST_Contains是PostGIS功能。
当$1
不是空字符串时,查询正常工作。但是当 为空时,不会获取offices
。 :(由于某种原因,当r
子查询没有返回任何行时,一切都会崩溃。
我做错了什么?
如果r
是一个空字符串,那么我可以简单地忽略$1
子查询(例如,如果你愿意,可以将它作为“可选的子查询”)。
答案 0 :(得分:0)
试试这个:
SELECT o.location
FROM (SELECT location FROM offices) AS o,
(SELECT polygon FROM regions WHERE COALESCE(TRIM($1), '') = '' OR id = NULLIF($1,'')::INT) AS r
WHERE (CASE WHEN COALESCE(TRIM($1),'') = '' THEN TRUE ELSE ST_Contains(r.polygon, o.location) END)