我有一张表Transport
,其中有2个fks指向一个表Spot
。那些fks存储了传输的origin
和destination
。
我需要进行查询,以获得点与原点之间以及相同点与目的地之间的最小距离。
这就是我所做的,虽然这得到了34个结果,它应该是17.我知道我做错了,但我无法正确查询:
SELECT LEAST(
ST_Distance(ST_GeographyFromText('SRID=4326; POINT(-3 40)'), s.point),
ST_Distance(ST_GeographyFromText('SRID=4326; POINT(-3 40)'), s.point)
) FROM spot s RIGHT OUTER JOIN transport t
ON t.origin = s.id OR t.destination = s.id;
显然我不应该在这里使用OR。我试过做双连接,但没有做对。
感谢您的帮助
答案 0 :(得分:2)
你必须使用两个连接,因为你的查询需要一个表Spot意义Origin,而一个表Spot意味着目的地。
试试这样:
SELECT LEAST(
ST_Distance(ST_GeographyFromText('SRID=4326; POINT(-3 40)'), sOrigin.point),
ST_Distance(ST_GeographyFromText('SRID=4326; POINT(-3 40)'), sDestination.point)
) FROM transport t
LEFT OUTER JOIN spot sOrigin ON t.origin = sOrigin.id
LEFT OUTER JOIN spot sDestination ON t.destination = sDestination.id;