我想cities_extended.city_id根据加入进行更新cities
桌子 cities
CREATE TABLE `cities` (
`id` int(11) NOT NULL,
`city` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`state_code` char(2) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`state_id` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `cities`
ADD PRIMARY KEY (`id`);
Run Code Online (Sandbox Code Playgroud)
桌子 cities_extended
CREATE TABLE `cities_extended` (
`id` int(11) NOT NULL,
`city` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`state_code` char(2) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`zip` int(5) UNSIGNED ZEROFILL NOT NULL,
`latitude` double NOT NULL,
`longitude` double NOT NULL,
`county` varchar(50) NOT NULL,
`state_id` int(11) NOT NULL DEFAULT '0',
`city_id` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `cities_extended`
ADD PRIMARY KEY (`id`);
ALTER TABLE `cities_extended`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;COMMIT;
Run Code Online (Sandbox Code Playgroud)
更新命令
UPDATE cities_extended
SET cities_extended.`city_id` = cities.`id`
FROM cities_extended
INNER JOIN cities
ON
cities_extended.`state_id` = cities.`state_id`
AND
cities_extended.`city`= cities.`city`
Run Code Online (Sandbox Code Playgroud)
结果是
CREATE TABLE `cities` (
`id` int(11) NOT NULL,
`city` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`state_code` char(2) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`state_id` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `cities`
ADD PRIMARY KEY (`id`);
Run Code Online (Sandbox Code Playgroud)
给这个错误你能帮我吗
MySQL 的语法UPDATE没有FROM(您可能从 SQL Server 示例中获得了语法)。
UPDATE
<table_references> -- this can be multiple tables joined
-- with the JOIN .. ON syntax
SET
column_name_1 = value1,
column_name_2 = value2
WHERE
<conditions>
... ;
Run Code Online (Sandbox Code Playgroud)
尝试这个:
UPDATE
cities_extended
INNER JOIN
cities
ON
cities_extended.state_id = cities.state_id
AND
cities_extended.city = cities.city
SET
cities_extended.city_id = cities.id ;
Run Code Online (Sandbox Code Playgroud)
或使用表别名:
UPDATE
cities_extended AS ce
INNER JOIN
cities AS c
ON
ce.state_id = c.state_id
AND
ce.city = c.city
SET
ce.city_id = c.id ;
Run Code Online (Sandbox Code Playgroud)