我有两个表:
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
中的行,我想:
- 在
TABLE_B
中查找TABLE_A
的Value
(999) - 在
TABLE_B
中找到对应的Name
(Cat) - 用新的
Q
(888)找到对应的TABLE_A_VALUE
- 在
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
但我不确定查找。
如有任何帮助,我们将不胜感激。
最佳答案
技巧是 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
关于MySQL 更新 - 使用从表 B 计算的值设置表 A 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26914309/