Tôi có hai bộ đa giác trong hai bảng. Các bộ chồng lên nhau. Đối với mỗi đa giác trong tập A, tôi muốn lấy ID của đa giác trong tập B mà nó trùng nhau nhất. Tôi đang sử dụng PostgreSQL với tiện ích mở rộng PostGIS.
Tôi biết vừa đủ về SQL để biết rằng bạn chỉ có thể tham gia dựa trên các điều kiện đúng / sai. Vì vậy, điều này sẽ không hoạt động:
SELECT
a.id as a_id,
b.id as b_id,
FROM
a
JOIN
b
ON
max(ST_Area(ST_Intersection(a.geom, b.geom)))
bởi vì max () không thể nằm trong mệnh đề ON.
ST_Intersects()
là một thử nghiệm đúng / sai, vì vậy tôi có thể tham gia vào đó, nhưng đa giác trong tập A thường sẽ trùng lặp với nhiều hơn một đa giác trong tập B, và tôi cần biết cái nào trùng với nhau nhất . ST_Intects có lẽ chỉ cần trả lại ID trùng lặp đầu tiên mà nó gặp, bất kể mức độ trùng lặp.
Điều này có vẻ như là có thể làm được, nhưng nó vượt xa tôi. Có suy nghĩ gì không?
DISTINCT ON
là mới đối với tôi - rất tiện dụng trong bối cảnh này.