2016-04-30 7 views
0

私は後続のSQLクエリを実行しますが、それは私にメッセージエラー:Unknown column 't1.ip' in 'where clause'を与えます。 サブテストでt1.ipをテスト用にハードコードすると、完全に動作します。サブクエリ非リレーショナルテーブルを使用して更新

UPDATE 
    report_a t1, 
    (SELECT 
     location.country, region.name, location.city 
    FROM 
     geoip 
    INNER JOIN 
     location 
    ON 
     geoip.locId = location.locId 
    INNER JOIN 
     region 
    ON 
     region.country = location.country 
    AND 
     region.region = location.region 
    WHERE 
     INET_ATON(t1.ip) BETWEEN startIpNum AND endIpNum 
    LIMIT 1) AS t2 
    SET 
     t1.country = t2.country, 
     t1.city = t2.city, 
     t1.state = t2.name; 

誰かがこのクエリをどのように行うことができますか?あなたがjoinを探している

おかげ

答えて

0

。私はLIMIT 1が何をしているのかについて少し不明です。

UPDATE report_a t1, 
     (SELECT location.country, region.name, location.city, startIpNum, endIpNum 
     FROM geoip INNER JOIN 
      location 
      ON geoip.locId = location.locId INNER JOIN 
      region 
      ON region.country = location.country AND 
       region.region = location.region 
     ) glr 
     ON INET_ATON(t1.ip) BETWEEN glr.startIpNum AND glr.endIpNum 
    SET t1.country = t2.country, 
     t1.city = t2.city, 
     t1.state = t2.name 
    LIMIT 1; 

私はそれについて考えると、あなたはおそらくLIMIT 1を望んでいない:私はそれが正しいことではないかもしれないが、外側のクエリにあることを移動しました。サブクエリに複数の一致があるのはなぜですか?

+0

ほぼ動作します! 「ON」を「WHERE」に変更しました。 'LIMIT 1 'を使うのはメーカーの推奨ですが、複数のマッチがあってはならないと思います。 – Guhh

関連する問題