使用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