MySQL:根据匹配值将数据从一个表更新或复制到另一个表

标签 mysql

我被这个问题难住了。我有两个表:

经销商

类别         cat_match_id

钱包
鞋子

类别

id      cat_name

1       钱包
2       鞋子

我想要做的是搜索Distributor中每行的category列(数千行),将其与cat_name 并获取类别(112 行)中的关联 ID,然后获取该 ID 并将其放入 cat_match_id 中。我搜索了我能找到的每一篇文章,并尝试了每一种解决方案,甚至是解决方案的组合。

我已经尝试过:

UPDATE Distributor
INNER JOIN Categories 
ON Distributor.category = Categories.cat_name
SET Distributor.category = Categories.id 

并且(尝试使用左、右、内、外等连接)

UPDATE Distributor d
LEFT JOIN Categories c 
ON d.category = c.cat_name
SET d.cat_match_id = c.id
WHERE d.category = c.cat_name

还使用 MySQL 中的示例:

UPDATE Distributor,Categories 
SET Distributor.cat_match_id = Categories.id
WHERE Distributor.category = Categories.cat_name

这些只是我尝试过的可能十几个或更多片段中的几个。是因为我试图匹配 2 个 varchar 并复制结果 int 吗?

最佳答案

您的初始查询几乎是正确的,除非您的数据存在一些问题,但您更新了错误的列。你应该这样做:

UPDATE Distributor d
INNER JOIN Categories c
    ON d.category = c.cat_name
SET d.cat_match_id = c.id;

您当前的尝试是更新 Category.category 字段,该字段已填充,并且是您在连接条件中使用的字段。

请注意,我在更新查询中引入了别名,这使其更易于阅读且更简洁。

关于MySQL:根据匹配值将数据从一个表更新或复制到另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54355036/

相关文章:

MySQL View 在 Order by 之后做一个 Group by

php - 我想将 JSON 字符串加载到 Flexigrid 表中

mysql - 选择最大 id 减一(倒数第二行 id)

php - 如何使用 where 子句连接 codeigniter 中的两个表

MySQL Pivot 准备语句 AS 整数错误

php - MySQL中的一对多关系,选择 "child"表信息

mysql - 如何以 1 到 n 的关系检索左表中的一些随机行和右表中的所有相关行

mysql - 计算给定日期范围内每个月的平均值

MySQL:在 '1st' 之前对 '101st' 进行排序

Python INSERT 不会写入数据库