MySQL 更新 - 使用从表 B 计算的值设置表 A 中的值

标签 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

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

  1. TABLE_B 中查找 TABLE_AValue (999)
  2. TABLE_B中找到对应的Name (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

但我不确定查找。

如有任何帮助,我们将不胜感激。

最佳答案

技巧是 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/

相关文章:

mysql - 如何解决因列问题而被截断的数据

mysql - MySQL 的奇怪查询结果

mysql - 如何创建一个条件来自两个表的过程?

php - 仅当值更改时才使用 PHP 更新 MySQL 数据库

mysql - 更新字段按顺序从另一个表获取值

mysql - 在 SET 语句中使用 MIN() MySQL

c# - 无法连接MySql、.Net Core Api

sql inner join - 多列而不是行

sql - PostgreSQL 更新未按预期工作

php - 根据多个值更新多个字段