2014-11-13 9 views
1

計算出的值我有兩個表:MySQL的更新 - 表設定值與表B

 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

換句話說轉換爲相應的行,如果我與ID=2更新該行中TABLE_A我想:

  1. 查找的ValueTABLE_ATABLE_B(999)
  2. 查找相應的TABLE_BName(CAT)
  3. 找到新Q(888)對應的TABLE_A_VALUE
  4. Update聲明中使用此值

 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

的訣竅是在TABLE_B第二INNER JOIN找到與高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 
+0

感謝行,這就是訣竅。 – cloying