PostgreSQL – 列不存在(与AS的地方)
我对PostgreSQL有点新手,但是我对MySQL有一些经验。
Postgres显示我和错误 – COLUMN不存在,但这是由AS创build的“虚拟列”。
代码,在MySQL中工作得非常好:
SELECT place.*, 3956 * 2 * ASIN(SQRT( POWER(SIN((place.lattitude - $1) * pi() / 180 / 2), 2) + COS($2 * pi() / 180) * COS(place.lattitude * pi() / 180) *POWER(SIN(($3 - place.longitude) * pi() / 180 / 2), 2) )) AS "distance" FROM place WHERE place.longitude BETWEEN $4 AND $5 AND place.lattitude BETWEEN $6 AND $7 HAVING "distance" < $8 ORDER BY "distance" LIMIT 10
但Postgres显示列“距离”不存在。
我怎样才能改写它? (请填写完整的SQL查询,而不是“ 如何 ”)
$ number是可变的(针对SQL注入)
谢谢
使用子查询:
SELECT p.* FROM (SELECT place.*, 3956 * 2 * ASIN(SQRT( POWER(SIN((place.lattitude - $1) * pi() / 180 / 2), 2) + COS($2 * pi() / 180) * COS(place.lattitude * pi() / 180) *POWER(SIN(($3 - place.longitude) * pi() / 180 / 2), 2) )) AS "distance" FROM place WHERE place.longitude BETWEEN $4 AND $5 AND place.lattitude BETWEEN $6 AND $7 ) p WHERE "distance" < $8 ORDER BY "distance" LIMIT 10;
你不想在MySQL中使用子查询,因为它实现了中间结果。 其他数据库在他们如何优化查询方面更聪明,并不一定实现子查询。