2016-04-30 8 views
0

Ich habe die folgende SQL-Abfrage, aber wenn ich ausführe Es gibt mir eine Fehlermeldung: Unknown column 't1.ip' in 'where clause'. Wenn ich t1.ip in Unterabfrage nur zum Testen hart Code, funktioniert es perfekt.Update mit Unterabfrage nicht relationalen Tabelle

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; 

Jemand hat eine Idee, wie ich diese Abfrage tun kann?

Dank

Antwort

0

Sie suchen einen join. Ich bin ein wenig unklar, was die LIMIT 1 tun soll. Ich zog, dass in der äußeren Abfrage, obwohl das nicht richtig sein könnte:

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; 

Als ich darüber nachdenke, haben Sie wahrscheinlich die LIMIT 1 nicht wollen. Warum sollte es mehrere Übereinstimmungen mit der Unterabfrage geben?

+0

Es funktioniert fast! Ich habe das 'ON' in' WHERE' geändert. "LIMIT 1" zu verwenden war eine Empfehlung des Herstellers, aber ich denke, es sollte nicht mehrere Übereinstimmungen haben. – Guhh

Verwandte Themen