2011-06-15 59 views
2

我有一個表Transport,它有2個fks指向一個表Spot。那些fks存儲運輸的origindestinationPostGIS:計算一個點與2個fks之間的最小距離:原點和目的地

我需要做一個查詢,獲取點和原點之間以及同一點和目的地之間的最小距離。

這是我做了什麼,雖然這讓我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。我試圖做雙JOIN,但沒有得到正確的答案。

感謝您的幫助

回答

2

你必須使用兩個連接,因爲您的查詢需要一個表意現貨來源及表意現貨目的地。

嘗試這樣的:

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; 
+0

感謝這麼多!我正在做錯誤的連接類型 – maraujop 2011-06-15 08:26:36