INSERT в Mysql таблицу из table2, сравнивая переменные в обеих таблицах - PullRequest
0 голосов
/ 18 июня 2020

Хорошо, у меня есть две таблицы, «Регион» и «Города», и мне нужно связать их вместе, используя идентификатор из регионов. В настоящее время используется общий код, который не подходит для моего варианта использования.

Таблица регионов:

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| country_code | varchar(255) | NO   | MUL | NULL    |                |
| code         | varchar(255) | NO   |     | NULL    |                |
| name         | varchar(255) | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

Таблица городов

+--------------+------------------+------+-----+---------+----------------+
| Field        | Type             | Null | Key | Default | Extra          |
+--------------+------------------+------+-----+---------+----------------+
| id           | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| country_code | varchar(255)     | NO   | MUL | NULL    |                |
| name         | varchar(255)     | NO   |     | NULL    |                |
| state        | varchar(255)     | NO   |     | NULL    |                |
| ascii_name   | varchar(255)     | NO   |     | NULL    |                |
| latitude     | double           | NO   |     | 0       |                |
| longitude    | double           | NO   |     | 0       |                |
| timezoneid   | varchar(255)     | NO   |     | NULL    |                |
| region_id    | int(11)          | YES  |     | NULL    |                |
+--------------+------------------+------+-----+---------+----------------+

В таблице городов Я добавил int region_id и хотел бы заполнить его из таблицы регионов на основе некоторого city.country_code = region.country_code AND region.code = city.state.

Что-то вроде этих строк:

INSERT INTO city (region_id) SELECT id FROM region WHERE city.country_code = region.country_code AND city.state = region.code;

В этом суть того, что я пытаюсь сделать, MySql работа не является сильной стороной

Любая помощь, приветствую!

1 Ответ

1 голос
/ 18 июня 2020

Я думаю, вам нужен оператор update (который изменяет данные в существующих строках), а не insert (который создает новые строки).

Если да, вы можете использовать синтаксис MySQL s update ... join:

update city c
inner join region r 
    on  c.country_code = r.country_code 
    and c.state = r.code
set c.region_id = r.id
...