【问题标题】:Can I tell MySQL not to return a specific column in the result set?我可以告诉 MySQL 不要返回结果集中的特定列吗?
【发布时间】:2013-06-13 23:17:24
【问题描述】:

我有一个查询,可查找距离经纬度坐标对范围内的位置。这是一个填充了latlng 值的示例:

SELECT 
    `id`, 
    ( 3959 * acos( cos( radians('39.8657112') ) * cos( radians( `lat` ) ) * cos( radians( `lng` ) - radians('-86.1478729') ) + sin( radians('39.8657112') ) * sin( radians( `lat` ) ) ) ) AS `distance` 
FROM `locations` 
HAVING `distance` < 0.100000

我的问题是我想在复合查询中使用它来过滤另一个查询的结果。例如:

SELECT * FROM `tickets` WHERE `location_id` IN ( <distance query goes here> );

但是,由于距离查询返回两列(iddistance),第二个查询因基数违规而失败:ERROR 1241 (21000): Operand should contain 1 column(s)

有什么方法可以告诉 MySQL 不要从查询中返回 distance 列,以便只返回 ids 的列表?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    典型的反应是构造一个与距离查询相同的查询,但从选择子句中删除距离列。

    SELECT `id` 
    FROM `locations` 
    WHERE ( 3959 * acos( cos( radians('39.8657112') ) * cos( radians( `lat` ) ) * cos( radians( `lng` ) - radians('-86.1478729') ) + sin( radians('39.8657112') ) * sin( radians( `lat` ) ) ) ) < 0.100000
    

    你看,我把整个计算移到了WHERE 子句中,并针对你的限制器进行了测试。

    【讨论】:

      猜你喜欢
      • 2010-11-05
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      相关资源
      最近更新 更多