這是我的查詢的樣子:
select "spaces"."id" as "id",
"spaces"."user_id" as "user_id",
"spaces"."type" as "type",
"spaces"."latitude" as "latitude",
"spaces"."longitude" as "longitude",
"categories"."category_id" as "categories:category_id"
from "spaces"
left join "spaces_categories" as "categories" on "categories"."space_id" = "spaces"."id"
where "categories"."category_id" in ($)
and ST_DWithin(spaces.geometry::geography, ST_SetSRID(ST_Point($,$), 4326)::geography, $)
我正在使用 pg 14.1
我正在嘗試查找半徑內滿足請求的類別 ID 的所有空間,以及這些空間的所有類別。
一個空間可以有許多類別 ID,所以如果我搜索類別 ids (1,2),并且恰好有 2 個空間結果(假設每個空間有 4 個類別,1,2,3,4),我會期待 8 行。但是,對于類別 1,2,我的查詢僅回傳 4 行。
只要有一些重疊,我如何更新我的查詢以便我可以獲得所有類別?
是因為我的IN條款嗎?
uj5u.com熱心網友回復:
EXISTS子查詢應該可以解決問題:
SELECT s.id
, s.user_id
, s.type
, s.latitude
, s.longitude
, c.category_id AS "categories:category_id"
FROM spaces s
LEFT JOIN spaces_categories c ON c.space_id = s.id
WHERE st_dwithin(s.geometry::geography, st_setsrid(st_point($,$), 4326)::geography, $)
AND EXISTS (
SELECT FROM spaces_categories x
WHERE x.space_id = s.id
AND x.category_id IN ($)
);
還有很多其他的方法,但這應該是最快最清晰的。
geometry不過,從到的演員geography陣容似乎令人擔憂。您是否有涵蓋該內容的表達索引?
有關的:
- 如何查詢坐標 5 英里半徑內的所有行?
- 如何遞回地查找兩個表之間的相交地理
- 為什么我在 Postgres 13 中的空間查詢比在 Postgres 11 中慢?
- ST_DWithin Calc Meters - 轉換或轉換?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/428231.html
標籤:sql PostgreSQL 加入 地理信息系统
