我有一个名为 ips 的表,如下所示:
CREATE TABLE `ips` (
`id` int(10) unsigned NOT NULL DEFAULT '0',
`begin_ip_num` int(11) unsigned DEFAULT NULL,
`end_ip_num` int(11) unsigned DEFAULT NULL,
`iso` varchar(3) DEFAULT NULL,
`country` varchar(150) DEFAULT NULL
) ENGINE=InnoDB
假设我countryid
在国家表中有一个字段,如下所示:
CREATE TABLE `country` (
`countryid` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`ordering` smallint(5) unsigned NOT NULL DEFAULT '0',
`iso` char(2) NOT NULL,
PRIMARY KEY (`countryid`)
) ENGINE=InnoDB
ips 表中大约有 100,000 条记录。是否对以下情况有任何查询:
检查是否ips.iso
等于country.iso
,如果等于则将 country.coutryid 添加到该记录。我想不出任何办法。你知道怎么做吗?
使用 MySQL 更新多表语法:
14.2.11 更新语法
请注意,您的 iso 列上有两种不同的长度和数据类型。事实上,有两组独立的 ISO 代码,2 个字母和 3 个字母,因此您实际上可能无法加入这些列:
ISO 3166-1
加入条件
USING (iso)
而不是也ON ips.iso = country.iso
有效。@Cade Roux 的解决方案给了我一个语法错误,mysql 5.5.29 的正确错误是:
没有“FROM”关键字。
这种语法可能更易读
谢谢@Cade,但我找到了一个简单的解决方案: