【问题标题】:Virtual column unknown when comparing lat lng比较 lat lng 时虚拟列未知
【发布时间】:2014-10-03 15:31:47
【问题描述】:

我试图只返回传递给查询的纬度和经度与存储在数据库中的纬度和经度相距一定英里数的行。

查询如下:

SELECT
    c.google_theatre_id 
    AS cinema_id,
    c.name 
    AS cinema_name,
    ( 3959 * acos( cos( radians('50.4521013') ) * 
    cos( radians( latitude ) ) * 
    cos( radians( longitude ) - 
    radians('-3.5247389') ) + 
    sin( radians('50.4521013') ) * 
    sin( radians( latitude ) ) ) ) 
    AS distance
FROM
    google_cinemas c, app_users u
WHERE 
    distance < u.range
AND 
    u.id = 126
ORDER BY 
    distance

该查询旨在获取距离,然后将其与app_users 表中的列 (range) 进行比较。

运行查询时,我收到distance 是未知列的错误。

由于这是一个虚拟列,是否有不同的比较方式?

谢谢:)

【问题讨论】:

  • 尝试使用HAVING。 MySQL 不允许在 WHERE 中引用别名列

标签: mysql sql


【解决方案1】:

您需要使用 HAVING 而不是 WHERE.. 这样想,当您在餐厅下订单时,HAVING 正在从盘子上挑选东西时...您无法引用只有在它被构建之后,它才会出现在你的桌子上之前的别名

SELECT
    c.google_theatre_id AS cinema_id,
    c.name AS cinema_name,
    ( 3959 * acos( cos( radians('50.4521013') ) * 
      cos( radians( latitude ) ) * 
      cos( radians( longitude ) - 
      radians('-3.5247389') ) + 
      sin( radians('50.4521013') ) * 
      sin( radians( latitude ) ) ) 
    ) AS distance
FROM google_cinemas c, app_users u
WHERE u.id = 126
HAVING distance < u.range
ORDER BY distance

或者,您可以将其用作子查询,因为 HAVING 会重新评估整个查询,因此速度可能会更快。

SELECT *
FROM
(   SELECT
        c.google_theatre_id AS cinema_id,
        c.name AS cinema_name,
        ( 3959 * acos( cos( radians('50.4521013') ) * 
          cos( radians( latitude ) ) * 
          cos( radians( longitude ) - 
          radians('-3.5247389') ) + 
          sin( radians('50.4521013') ) * 
          sin( radians( latitude ) ) ) 
        ) AS distance,
        u.range
    FROM google_cinemas c, app_users u
    WHERE u.id = 126
    ORDER BY distance
)t
WHERE distance < range

【讨论】:

  • 这是一个奇怪但很好的类比。 +1
  • @ʰᵈˑ 哈哈感谢它是一种向人们直观地解释它的好方法......这样他们就可以以一种简单的方式理解它是如何工作的:)
猜你喜欢
  • 2013-04-13
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 2018-05-20
  • 2013-01-27
  • 2011-11-29
相关资源
最近更新 更多