Я почав грати з SpatiaLite сьогодні і вже натрапив на проблему.
Для кожного місця розташування, збереженого в tableOne, я хотів би вибрати одну, найближчу (лінійну відстань) точку від tableTwo.
Поки що я придумав незграбне рішення, яке використовує ПОГЛЯД:
CREATE VIEW testview AS
SELECT
A.id ,
B.myValue,
Distance(A.Geometry, B.Geometry) AS distance
FROM tableOne AS A, tableTwo AS B
WHERE distance < 10000
ORDER BY A.Id, distance;
І потім:
SELECT * FROM testview
WHERE distance = (SELECT MIN(distance) FROM testview AS t WHERE t.id = testview.id)
здається, виконує роботу.
Два питання:
Чи є спосіб виконати такий запит, не створюючи VIEW?
Чи є якийсь інший спосіб оптимізувати цей запит для кращої ефективності? У реальному сценарії tableOne буде мати сотні-пару тисяч записів, а tableTwo - 1,3 мільйона.