【问题标题】:Populate a column in MySQL with column value from another table用另一个表中的列值填充 MySQL 中的列
【发布时间】:2015-03-19 06:36:39
【问题描述】:

我正在尝试在 SQL 中做一些我认为非常基本的事情,但我似乎完全无法弄清楚。

我有 2 张桌子:

省份->

 id                                  |   name     |  pCode |  country_id  | cCode
78840113-a0e5-11e4-8237-de7fe3f523cf |  Alabama   | AL     | 1228         |
7884030c-a0e5-11e4-8237-de7fe3f523cf |  Alaska    | AK     | 1228         |
788403ea-a0e5-11e4-8237-de7fe3f523cf |  Arizona   | AZ     | 1228         |
788404a2-a0e5-11e4-8237-de7fe3f523cf |  Arkansas  | AR     | 1228         |

和国家 ->

iso_code  | name                   | country_id
AD        | Andorra                | 1005           
AE        | United Arab Emirates   | 1225           
AF        | Afghanistan            | 1001           
AG        | Antigua and Barbuda    | 1009          

我只想用适当的 iso_code 填充 Provinces 中的 cCode 列(如果省和国家/地区中的 country_id 相同)。

我已经尝试了很多东西,甚至没有在这里编写我的代码,我什至不知道哪个方向是正确的方法(加入、插入、更新??)。我完全被卡住了,请帮帮我!

【问题讨论】:

  • 那么,根据您的示例数据,由于没有匹配的 country_id,所以没有更新?
  • 这只是数据的一个子集。

标签: mysql database join insert sql-update


【解决方案1】:

您可以在此处使用UPDATE...JOIN 语法:

UPDATE provinces JOIN countries USING (country_id)
  SET provinces.cCode=countries.iso_code

【讨论】:

  • 与上述答案一样,当我尝试此操作时,我得到错误代码 1175:您正在使用 sage 更新模式,并且您尝试更新没有使用 KEY 列的 WHERE 的表。关闭安全模式对我来说安全吗?我不确定后果会是什么。
  • @user1795370 试试SET SQL_SAFE_UPDATES = 0;
【解决方案2】:

如果你真的在使用Mysql:

update Provinces p
inner join countries c on
    p.country_id = c.country_id
set p.cCode = c.iso_code

【讨论】:

  • 请注意,使用 INNER JOIN 只会更新匹配 country_id 的记录;它不会触及任何其他人。 IE。它不会清除不匹配记录的 Provinces.cCode 值。
  • 他只想在 Provinces 中的 cCode 列中填充适当的 iso_code(如果省和国家/地区中的 country_id 相同)。
  • 当我尝试此操作时,我得到错误代码 1175:您正在使用 sage 更新模式,并且您尝试更新没有使用 KEY 列的 WHERE 的表。关闭安全模式对我来说安全吗?我不确定后果会是什么。
  • 由于您的安全模式选项,如果没有 where 子句的主键,您将无法更新/删除。在安全模式开启的情况下,您将无法进行所需的更新,并且此查询不会做任何不期望的事情。因此,您可以将其关闭以执行此更新,然后再将其打开。
猜你喜欢
  • 2023-03-21
  • 2017-03-02
  • 2022-08-18
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多