我有一个包含两个表的MySql数据库。一个表(“国家/地区”表)具有国家/地区列表(列为unique_id和country_name)。另一个表(“州”)表有一个全球区域列表(相当于美国的州)。 States表中的列是state_id,state_name,country_name)。
我想将'State'表中的所有国家/地区名称转换为'Country'表中相应的unique-id。有没有办法做到这一点?
任何帮助表示感谢,并提前感谢您。
答案 0 :(得分:6)
添加新列,以保存外键:
ALTER TABLE State
ADD COLUMN country_id BIGINT UNSIGNED NULL,
ADD FOREIGN KEY (country_id) REFERENCES Country (unique_id); -- optional
上面标有optional
的行添加了foreign key constraint,只有在以下情况下才会起作用:(i)两个表都使用InnoDB引擎; (ii)State.country_id
和Country.unique_id
是相同的数据类型; (iii)Country.unique_id
被编入索引(它应该是该表的主键)。
使用多表UPDATE
填充新列:
UPDATE State JOIN Country USING (country_name)
SET State.country_id = Country.unique_id;
删除原始列:
ALTER TABLE State
DROP COLUMN country_name,
MODIFY country_id BIGINT NOT NULL; -- optional
上面标有optional
的行会强制每个State
拥有country_id
。
答案 1 :(得分:0)
如果您需要选择数据以查看唯一ID而不是国家/地区名称,则可以使用内部联接
select StateId, StateName, UniqueId from states
INNER JOIN countries
ON states.CountryName = countries.CountryName;