我有两张桌子:
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
中的行,我想:
Value
(999)TABLE_A
查找TABLE_B
Name
(Cat)TABLE_B
TABLE_A_VALUE
(888)Q
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
但我不确定查找。
感谢任何帮助。
答案 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