2016-06-28 3 views
2

私はこれをやって、私がこれでやったすべての検索と読書をしていても、どうやって頭を包んでいるのですか?2列のMySQLサブクエリ - 2列目を非表示にする方法?

私は、指定された小数点座標の特定の距離に収まる郵便番号を持つデータベースからすべてのユーザーを引き出すために使用しているクエリがあります。ここで私が実行しているクエリです:

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

私は、このフィルタをどのように操作を行うことができます。私のサブクエリは2つの列を返しているように私は戻って取得

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'); 

あり誤差が、期待されています両方の列を返すサブクエリなしの距離に?

P.S.補完と情報のために、 "zip"テーブルには、米国のすべての郵便番号のリストと小数点座標が含まれています。

+1

"、"ジップ後に2つの列が表示されます。 –

+0

適切な明示的な 'join'構文を使用する方法を学んでください。 2つの郵便番号が指定された半径内にある場合、クエリは失敗します。 –

答えて

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 INAND watch_list.watchzip =を変更したいです。

+0

AND watch_list.watchzip =とAND watch_list.watchzip INに変更しますか? –

+0

これは完璧に機能しました!ありがとうございました! – user3278041

関連する問題