MySQL根据另一个表中的字段指定更新记录的字段

时间:2015-04-08 14:43:03

标签: mysql sql sql-update

我有一个“主”表,我正在尝试应用更改表。 “大师”是一张表,是从过去的一个时间点开始的。自那时起对“主人”所做的更改列在“更改”中,并且我获得了记录编号,需要更新的字段的名称,字段的新值以及日期/时间改变了。如果我不能采取最新的更改,那不是问题,因为我可以更改表,以便它只有最新的更新。我的问题是获取一个查询来更新记录中的字段,我从另一个表中获取字段名称。

有什么想法吗?我从硬编码方程开始我的代码,但想知道是否有动态的方法来做到这一点。

UPDATE MASTER
INNER JOIN MASTER b
   ON a.Id = b.Id
SET b.description = a.New_Value
WHERE a.change_field = "Description"

......(then I need it to do the same for any instance of one of the other 3 fields)

;

表“MASTER”:

    Id        | Description | Brand   | Cost   | Mapping
    --------------------------------------------------
    123       |  A Desc     |   Any   |  0.01  | Candy
    456       |  B Desc     |   Old   |  0.02  | Baking
    789       |  C Desc     |   Brand |  0.03  | Season

表“更改”:

    Id           | Change Field   |   New Value  | Change Time
    -----------------------------------------------------------
    123          | Description    |   AA Desc    |  01:15:00
    123          | Description    |   AAA Desc   |  12:15:00
    456          | Brand          |   Good       |  01:15:00
    456          | Brand          |   Best       |  12:15:00
    789          | Cost           |   0.44       |  01:15:00
    789          | Mapping        |   Salt       |  01:15:00
    789          | Mapping        |   Sugar      |  12:15:00

表“MASTER”,更新为“CHANGES”:

    Item Code | Description | Brand   | Cost   | Mapping
    --------------------------------------------------
    123       |  AAA Desc   |   Any   |  0.01  | Candy
    456       |  B Desc     |   Best  |  0.02  | Baking
    789       |  C Desc     |   Brand |  0.44  | Sugar

非常感谢!

1 个答案:

答案 0 :(得分:0)

如果没有足够的时间我会怎么做 将所有行从CHANGES表复制/导出到Excel工作表。 然后使用CONCATENATE公式在Excel上构建查询,点击下面的快照。

enter image description here

一旦您的公式完美,只需将其向上拖动到下面的所有行。

然后只需将整个批量从Excel列复制粘贴到查询浏览器并执行它。

还有一件事:如果您想要按时间更新最新值(在您的情况下,descriptionbranchmapping字段有两行{{1}然后你需要只复制那些需要处理的记录。例如从Change Time表中选择记录时,您需要使用Changesgroup by Change Time

当你生成公式时,你还需要处理其他数据类型然后字符串略有变化 - 我在快照中提到。

如果它没有帮助或者您需要更多帮助,请告诉我。

如果有帮助,请将其标记为答案。