MySQL子查询有两列 - 如何隐藏第二列?

时间:2016-06-28 14:05:17

标签: mysql sql

我很难绕过如何做到这一点,即使我已经完成了所有搜索和阅读!

我正在使用一个查询来尝试从数据库中提取所有用户,这些用户的邮政编码位于给定小数点坐标的特定距离内。这是我正在运行的查询:

select distinct watch_list.username, enabled 
from watch_list, registered_users 
where watch_list.username = registered_users.username AND watch_list.watchzip = (
  SELECT zip,
    ( 3959 * acos( cos( radians('29.7632800') ) *
     cos( radians( lat ) ) *
     cos( radians( lng ) -
     radians('-95.3632700') ) +
     sin( radians('29.7632800') ) *
     sin( radians( lat ) ) ) )
  AS distance from zip 
  HAVING distance <= '10');

由于我的子查询返回两列,我得到了错误:

MySQL said: Documentation
#1241 - Operand should contain 1 column(s)

如何在没有子查询返回两列的情况下对距离进行过滤?

P.S。只是为了完成和信息,&#34; zip&#34; table包含美国所有邮政编码列表及其小数点坐标。

1 个答案:

答案 0 :(得分:1)

只需将操作移出列列表:

select distinct watch_list.username, enabled
from watch_list, registered_users
where watch_list.username = registered_users.username
      AND watch_list.watchzip = (
          SELECT zip
          from zip
          WHERE ( 3959 * acos( cos( radians('29.7632800') ) *
                  cos( radians( lat ) ) *
                  cos( radians( lng ) -
                  radians('-95.3632700') ) +
                  sin( radians('29.7632800') ) *
                  sin( radians( lat ) ) ) ) <= '10');

编辑:正如P.Salmon所提到的,您可能还想将AND watch_list.watchzip =更改为AND watch_list.watchzip IN