加入另一个表进行更新

Red*_*ies 1 mysql join update

我想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)

给这个错误你能帮我吗

ype*_*eᵀᴹ 5

MySQL 的语法UPDATE没有FROM(您可能从 SQL Server 示例中获得了语法)。

MySQL 中语法是

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)