Mysql 根据相关表上的最大值更新记录
我有两张桌子 表A如下:Mysql 根据相关表上的最大值更新记录,mysql,sql,sql-update,Mysql,Sql,Sql Update,我有两张桌子 表A如下: ID NAME VALUE 1 abc 0 2 lmn 0 3 xyz 0 ID SUB_GROUP VALUE 1 Category 1 10 1 Category 2 4 1 Category 3 8 1 Category 4 12 3 Category 1 6 3 Category 2 14 3 Category 3 0 3 Category 4 3 表B如下: ID NAME VALUE 1 abc 0 2
ID NAME VALUE
1 abc 0
2 lmn 0
3 xyz 0
ID SUB_GROUP VALUE
1 Category 1 10
1 Category 2 4
1 Category 3 8
1 Category 4 12
3 Category 1 6
3 Category 2 14
3 Category 3 0
3 Category 4 3
表B如下:
ID NAME VALUE
1 abc 0
2 lmn 0
3 xyz 0
ID SUB_GROUP VALUE
1 Category 1 10
1 Category 2 4
1 Category 3 8
1 Category 4 12
3 Category 1 6
3 Category 2 14
3 Category 3 0
3 Category 4 3
我想通过匹配ID列将表A的值列设置为表B中的最大值来更新表A,但只针对Category2或Category3中表B中的值
MySQL查询可能是什么样子的
UPDATE tableA a
INNER JOIN
(
SELECT ID, MAX(Value) max_val
FROM tableB
WHERE SUB_GROUP IN ('Category 2','Category 3')
GROUP BY ID
) b ON a.ID = b.ID
SET a.VALUE = b.Max_Val
:D
上面的查询在fiddle上工作。这是因为您使用的是子查询,但没有为其分配别名。下面是一个例子,删除b
,重新构建并设置发生的情况。非常好。谢谢@JW--非常棒的答案和解决方案(这是我查询中的一个输入错误)谢谢@JW…我现在就要尝试一下。得到消息“每个派生表都必须有自己的别名”继续工作it@H.Ferrence我很确定你的问题有错?你能给我看一下,这样我们就能解决问题了吗:D
上面的查询在fiddle上工作。这是因为您使用的是子查询,但没有为其分配别名。下面是一个例子,删除b
,重新构建并设置发生的情况。非常好。谢谢@JW——非常棒的答案和解决方案(这是我查询中的一个输入错误)