SQL将文本更改为唯一ID号

时间:2015-09-28 20:36:16

标签: mysql sql

我有一个包含两个表的MySql数据库。一个表(“国家/地区”表)具有国家/地区列表(列为unique_id和country_name)。另一个表(“州”)表有一个全球区域列表(相当于美国的州)。 States表中的列是state_id,state_name,country_name)。

我想将'State'表中的所有国家/地区名称转换为'Country'表中相应的unique-id。有没有办法做到这一点?

任何帮助表示感谢,并提前感谢您。

2 个答案:

答案 0 :(得分:6)

  1. 添加新列,以保存外键:

    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_idCountry.unique_id是相同的数据类型; (iii)Country.unique_id被编入索引(它应该是该表的主键)。

  2. 使用多表UPDATE填充新列:

    UPDATE State JOIN Country USING (country_name)
    SET    State.country_id = Country.unique_id;
    
  3. 删除原始列:

    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;