2014-09-10 70 views
1

我试图更新表1的COUNTRY_ID的,所以我可以删除列iso_2_codeCountry因该数据是在数据库冗余和已经存储在表2MSQL更新表1使用表2 UPDATE选择从

表1 - oc_ip_geo_table

================================================================================================= 
| ID | StartRange  | EndRange  | iso_2_code | Country  | country_id | 
================================================================================================= 
| 1 | 1.0.1.0  | 1.0.3.255  |  CN  | China  |  0  | 
| 2 | 1.0.4.0  | 1.0.7.255  |  AU  | Australia |  0  | 
| 3 | 1.0.8.0  | 1.0.15.255  |  CN  | China  |  0  | 
| 4 | 1.0.16.0  | 1.0.31.255  |  JP  | Japan  |  0  | 
| ... | ...   | ...    |  ...  | ...   |  ...  | 
| 87035 | 223.255.255.0 | 223.255.255.255 |  AU  | Australia |  0  | 
------------------------------------------------------------------------------------------------- 

表2 - oc_country

================================================================================= 
| country_id  | name   | iso_code_2 | * | * | * | 
================================================================================= 
|  1   | Afghanistan  |  AF  | * | * | * | 
|  2   | Albania   |  AL  | * | * | * | 
|  3   | Algeria   |  DZ  | * | * | * | 
|  ...   | ...    |  ...  | ... | ... | ... | 
|  251   | Canary Islands |  IC  | * | * | * | 
--------------------------------------------------------------------------------- 

搜索到谷歌搜索结果后,我发现我的查询应该looklike日是。但它似乎不工作。

UPDATE oc_ip_geo_table 
SET oc_ip_geo_table.country_id = oc_country.country_id 
FROM oc_ip_geo_table 
INNER JOIN oc_country 
ON oc_ip_geo_table.iso_2_code = oc_country.iso_code_2 

谁能帮我用正确的查询

+0

您使用的是MySQL还是MS SQL? – 2014-09-10 12:12:00

回答

0

好似乎查询我试图之前,我在这里发布的几乎是正确的,但改变一点解决它

UPDATE oc_ip_geo_table AS t1 
SET t1.country_id = 
    (SELECT t2.country_id 
     FROM oc_country AS t2 
     WHERE t2.iso_code_2 = t1.iso_2_code 

    ) 

更改为

UPDATE oc_ip_geo_table AS t1 
SET t1.country_id = 
    (SELECT t2.country_id 
     FROM oc_country AS t2 
     WHERE t1.iso_2_code = t2.iso_code_2 

    ) 
0

我不是舒尔..但我想你已经设置后删除oc_ip_geo_table

UPDATE oc_ip_geo_table 
SET country_id = occ.country_id 
FROM oc_ip_geo_table opi 
INNER JOIN oc_country occ 
ON opi.iso_2_code = occ.iso_code_2 
+1

Tnxs的评论我也试过,但是无论如何,力工作,这似乎工作 UPDATE oc_ip_geo_table为T1 SET t1.country_id = (SELECT t2.country_id FROM oc_country为T2 WHERE t1.iso_2_code = t2.iso_code_2 ) – 2014-09-10 12:06:22