我在详细说明 MySQL 查询时遇到了另一个问题。
我有两个数据库,每个数据库都有一个包含城市的数据库。我的客户从另一家公司获得了他的旧网站,我需要获取旧数据库城市和新数据库城市之间的相关性。
这是数据库的结构:
数据库1
CREATE TABLE new_cities (
new_id INT PRIMARY KEY,
new_postal_code INT,
new_city_name VARCHAR(255)
);
数据库2
CREATE TABLE old_cities (
old_id INT PRIMARY KEY,
old_postal_code INT,
old_city_name VARCHAR(255)
);
CREATE TABLE old_entries (
entry_id INT PRIMARY KEY,
city_id INT
);
所以我必须将条目从一个数据库转移到另一个,但问题是 old_entries.old_city_id 不会对应于新数据库中的正确城市,因为 id 不同。
我想得到我的 old_entries.* 加上一个字段(或直接替换 old_city_id),其中包含我通过邮政编码对应得到的 new_city_id。
这是我当前不起作用的查询:
SELECT *,
(SELECT database1.new_cities.id FROM database1.new_cities, database2.old_entries WHERE database1.new_cities.zipcode =
(SELECT database2.old_cities.cp FROM database2.old_cities, database2.old_entries WHERE database2.old_entries.city_id = database2.old_cities.old_id)
) AS newcp FROM database2.old_entries WHERE 1
我得到了我的子查询返回多行的逻辑消息。
结构应该是这样的:
1 - 拿走我的 old_entry
2 - 获取 old_entry.city_id 并从 old_cities 表中获取相应的邮政编码
3 - 获取此邮政编码并获取与此邮政编码对应的 new_cities.new_id
4 - 将此 new_id 添加到 AS newcp 行(或直接用它替换 city_id 的值)
如何使查询为每一行获取相应的 new_city_id AS newcp ?
编辑:样品
参赛样本:
ID| CITY_ID
1 | 23000
old_cities 样本
ID | ZIPCODE | NAME
23000 | 75000 | Paris
新城市样本
ID | ZIPCODE | NAME
23000 | 13000 | Marseille
23500 | 75000 | Paris
预期结果:
ID | OLD_CITY_ID | NEW_CITY_ID
1 | 23000 | 23500
或最终
ID | CITY_ID
1 | 23500
所以我们可以看到,如果我转移的entry保持它的city_id,就不再对应Paris,而是对应Marseille,所以我需要将entry.city_id中的23000替换为23500,也就是城市Paris的新id,由其邮政编码 (75000) 标识