首页 > 解决方案 > Mysql:根据另一列值更新列

问题描述

我的数据库中有大约 300 条记录,它们的列中有无效数据。无效的列引用 user_id 而不是 id 代码(如表中所示)。

我正在尝试将= 设置为列new_foreign_dealer_id内的 user_idold_dealer_id_to_dealer

因此在表中,值为 206 的 user_id 将搜索 204 并将 206 的行列替换为 204 的new_foreign_dealer_id

之前的用户表:

+---------+-----------------------+-------------------------+
| user_id | new_foreign_dealer_id | old_dealer_id_to_delete |
+---------+-----------------------+-------------------------+
|     200 | 5                     | 02-000012               |
|     204 | 8                     | 02-000097               |
|     206 | 0 (invalid)           | 204 (referneces user_id |
+---------+-----------------------+-------------------------+

之后的用户表:

+---------+-----------------------+-------------------------+
| user_id | new_foreign_dealer_id | old_dealer_id_to_delete |
+---------+-----------------------+-------------------------+
|     200 | 5                     | 02-000012               |
|     204 | 8                     | 02-000097               |
|     206 | 8                     | 204 (referneces user_id |
+---------+-----------------------+-------------------------+

这是我试过的查询

UPDATE users SET dealer_id_foreign = dealer_id_foreign WHERE dealer_id = user_id

注意:我的查询中的列名是正确的。ASCII 列是为了清楚起见。

编辑:最终使用 PHP 来实现这一点。仍然对sql答案感兴趣

标签: mysql

解决方案


http://sqlfiddle.com/#!9/6e5a88/1

UPDATE my_table t
JOIN my_table new
ON t.old_dealer_id_to_delete = new.user_id
   AND t.new_foreign_dealer_id = 0
SET t.new_foreign_dealer_id = new.new_foreign_dealer_id;

推荐阅读