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

时间:2019-01-24 20:43:53

标签: mysql

我对此感到困惑。我有两个表:

分销商

类别 cat_match_id

钱包
鞋子

类别

id 猫名

1个钱包
2鞋子

我要做的是在 Distributor (数千行)的每一行中搜索 category 列,并将其与 cat_name < / em>并在 Categories 中获取关联的ID(112行),然后将该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上吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

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