2016-08-20 64 views
0

執行多個SQL SELECT查詢我使用的PostGIS擴展PostgreSQL和具有表是這樣的:如何批量

CREATE TABLE areas 
(
    id integer NOT NULL DEFAULT nextval('areas_id_seq'::regclass), 
    name character varying(1024) NOT NULL, 
    shape geometry NOT NULL, 
    CONSTRAINT pk_id PRIMARY KEY (id) 
) 

我的應用程序接收多個座標點(緯度/經度對),並針對每一個點,我需要找到相應的區域。因此SQL單點看起來像

SELECT id, name FROM areas WHERE ST_Within(shape, ST_MakePoint(lng, lat)); 

但我需要執行此查詢幾點。我可以爲每個點執行單獨的查詢,但我想應該有一種方法來實現它與單個查詢。

當然,我可以在這裏使用UNION但:

  • 據我瞭解與UNION團結N次查詢比單獨N次查詢
  • 像我在輸入3點並不快,我結合3結果選擇並得到2個區域。我需要了解哪個點與哪個點對應(以及哪個點沒有關聯區域),這意味着我需要在我的代碼中執行此操作(如果有3000個點而不是3個點,則可能會很長),即使PostGIS已經完成所有檢查。

我認爲可以創建臨時表,將輸入點放在那裏,然後爲兩個表執行JOIN select。但可能有更好的方法。

所以問題是:在PostgreSQL(或任何其他RDBMS)中,對於N個輸入值,更快的方式執行相同的查詢並以與輸入值相同的順序獲得確切的N個結果(假設對於某些輸入值,結果將爲NULL )?

回答

0

那麼,你可以嘗試這樣的事情:

SELECT a.id, a.name, p.which 
FROM areas a JOIN 
    (SELECT lng1 as lng, lat1 as lat, 'point1' as which UNION ALL 
     SELECT lng2, lat2, 'point2' as which 
    ) p 
    ON ST_Within(a.shape, ST_MakePoint(p.lng, p.lat));