Tenho uma tabela em nome de ips conforme abaixo:
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
Vamos supor que eu tenha um countryid
campo nesta tabela da tabela de países que é como abaixo:
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
Há cerca de 100.000 registros na tabela ips. Existe alguma consulta para o seguinte cenário:
Verifique se ips.iso
é igual a country.iso
, se for igual adicione country.coutryid a esse registro. Eu não conseguia pensar em nenhuma maneira de fazer isso. Você tem alguma ideia de como fazer isso?
Usando o MySQL atualize a sintaxe de várias tabelas:
14.2.11 ATUALIZAR Sintaxe
Observe que você tem dois comprimentos e tipos de dados diferentes em suas colunas iso. Existem, de fato, dois conjuntos separados de códigos ISO, 2 letras e 3 letras, portanto, na realidade, você pode não conseguir unir essas colunas:
ISO 3166-1
A condição de junção
USING (iso)
em vez deON ips.iso = country.iso
também funciona.A solução do @Cade Roux me dá um erro de sintaxe, o correto para o mysql 5.5.29 é:
sem a palavra-chave "FROM".
Esta sintaxe pode ser mais legível
obrigado @Cade, mas encontrei uma solução simples para isso: