mysql - SQL 将文本更改为唯一 ID 号

标签 mysql sql

我有一个包含两个表的 MySql 数据库。一个表('Country' 表)有一个国家列表(列是 unique_id 和 country_name)。另一个表(“州”)表包含全局区域列表(相当于美国各州)。 States 表中的列是 state_id、state_name、country_name)。

我想将“州”表中的所有国家/地区名称转换为“国家/地区”表中相应的唯一 ID。有没有办法做到这一点?

感谢您提供的任何帮助,并在此先感谢您。

最佳答案

  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

关于mysql - SQL 将文本更改为唯一 ID 号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32831370/

相关文章:

mysql - 避免在从脚本运行 MySQL 的每个命令中添加用户名和密码

mysql - 将 csv 文件(编码 = UCS2)加载到自制表中时出现问题

mysql - 在 MySql 查询中构造 JSON 对象时取消引用值

mysql - 如何获取第一个表中的所有行以及第二个表中的计数行?

sql - 在同一 SQL 查询中匹配多个值

sql - 这个存储过程对 sql 注入(inject)安全吗?

MySQL导入/导出版本不兼容

sql - 在列中放置默认值有什么好处?

sql - 在多个 Oracle 数据库上执行 SQL 脚本

mysql - OleDb 数据读取器问题