使用PostgreSQL-9.1和PostGIS 2.0.1時,在執行包含返回多列的子查詢的SELECT查詢時,出現錯誤subquery must return only one column
。PostgreSQL錯誤:子查詢必須只返回一列
如何修改查詢/子查詢以返回多個列?
查詢
SELECT l.id, l.lat, l.lng, l.geom,
(SELECT g.id, g.lat, g.lng, ST_Distance(l.geom, g.geom)
FROM stage.dogs as g
LIMIT 1)
FROM stage.users As l
完整的查詢
SELECT l.id, l.lat, l.lng, l.geom,
g.id, g.lat, g.lng, ST_Distance(l.geom, g.geom)
FROM stage.users As l
CROSS JOIN (SELECT *
FROM stage.dogs as g
ORDER BY g.geom <-> l.geom
LIMIT 1) as g
錯誤
ERROR: invalid reference to FROM-clause entry for table "l"
SQL state: 42P01
Hint: There is an entry for table "l", but it cannot be referenced from this part of the query.
我試圖擴大查詢(更新問題),現在theres錯誤'錯誤:表的無效引用FROM-clause條目「l」' '提示:有一個表「l」的條目,但它不能從這部分查詢中引用。' – Nyxynyx 2013-05-09 06:39:07
對於第二個查詢,需要200ms才能返回500行。然而,就像Erwin的回答一樣,這個查詢返回了離每個'l.geom'最遠的'g.geom'。那麼也許我正在使用錯誤的CRS? 'geom' cols目前是'POINT,2163' – Nyxynyx 2013-05-10 06:04:28
在這裏抓住吸管,嘗試在子查詢中使用'ORDER BY ST_Distance(l.geom,g.geom)'? – RichardTheKiwi 2013-05-10 08:42:11