2016-06-28 90 views
2

即使所有的搜索和閱讀都已經完成,我正在困難的時間圍繞着如何做到這一點。有兩列的MySQL子查詢 - 如何隱藏第二列?

我有一個查詢,我試圖從一個郵政編碼落在給定的十進制座標的一定距離內的數據庫中拉出所有用戶。下面是我運行查詢:

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.爲了完成和信息,「zip」表包含美國所有郵政編碼列表以及它們的小數座標。

+1

zip後面的「,」會給出兩列。 –

+0

學習使用正確的顯式'join'語法。如果兩個郵政編碼在給定的半徑內,您的查詢將失敗。 –

回答

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

+0

更改AND watch_list.watchzip =和AND watch_list.watchzip IN? –

+0

完美運作!謝謝! – user3278041