MySQL Update - 使用表B计算的值设置表A中的值

时间:2014-11-13 17:02:00

标签: mysql sql-update

我有两张桌子:

      TABLE_A                        TABLE_B
=================          =========================
ID  |  Value | Q           TABLE_A_VALUE | Q | Name
====|========|===          ==============|===|======
 2  |  999   | 1                999      | 1 | Cat
 3  |  777   | 1                888      | 2 | Cat
                                777      | 1 | Dog
                                666      | 2 | Dog

我需要执行更新以更改TABLE_A.Q = 2 WHERE ID = 2并在同一声明中将TABLE_A.VALUE更改为相关TABLE_B.TABLE_A_VALUE执行查找以将TABLE_A_VALUE转换为相应的行与原始值具有相同的Name,但新的Q

换句话说,如果我使用TABLE_A更新ID=2中的行,我想:

  1. Value(999)
  2. TABLE_A查找TABLE_B
  3. Name(Cat)
  4. 中找到相应的TABLE_B
  5. 使用新的TABLE_A_VALUE(888)
  6. 查找相应的Q
  7. Update声明
  8. 中使用此值

          TABLE_A                  TABLE_A        
    =================        =================    
    ID  |  Value | Q         ID  |  Value | Q     
    ====|========|===   =>   ====|========|===    
     2  |  999   | 1          2  |  888   | 2     
     3  |  777   | 1          3  |  777   | 1     
    

    这是我坚持的一点。我可以:

    UPDATE TABLE_A SET Q=2 WHERE ID=2

    但我不确定查找。

    感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

诀窍是INNER JOIN上的第二个TABLE_B找到Q

更高的行
UPDATE TABLE_A x
INNER JOIN TABLE_B y ON x.Value=y.TABLE_A_VALUE
INNER JOIN TABLE_B z ON y.Name=z.Name AND z.Q>y.Q
SET x.Q=z.Q, x.Value=z.TABLE_A_VALUE
WHERE x.ID=2