Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 根据相关表上的最大值更新记录_Mysql_Sql_Sql Update - Fatal编程技术网

Mysql 根据相关表上的最大值更新记录

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

我有两张桌子

表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  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

这将是一个带有子选择的更新。看起来很简单。但这将取决于您使用的SQL的版本?这是您想要进行的按需调用,还是希望TableA始终具有所述的最大值?我正在运行MySQL:5.1.67@RobOn demand(即当我运行更新脚本时),但始终具有最大值@leftclickbenIt将是一个具有子选择的更新。看起来很简单。但这将取决于您使用的SQL的版本?这是您想要进行的按需呼叫,还是希望TableA始终具有所述的最大值?我正在运行MySQL:5.1.67@RobOn demand(即当我运行更新脚本时),但始终具有最大值@leftclickbenThanks@JW…我现在就尝试一下。收到此消息吗“每个派生表都必须有自己的别名“继续致力于it@H.Ferrence我很确定你的问题有错?你能给我看一下,这样我们就能解决问题了吗
:D
上面的查询在fiddle上工作。这是因为您使用的是子查询,但没有为其分配别名。下面是一个例子,删除
b
,重新构建并设置发生的情况。非常好。谢谢@JW--非常棒的答案和解决方案(这是我查询中的一个输入错误)谢谢@JW…我现在就要尝试一下。得到消息“每个派生表都必须有自己的别名”继续工作it@H.Ferrence我很确定你的问题有错?你能给我看一下,这样我们就能解决问题了吗
:D
上面的查询在fiddle上工作。这是因为您使用的是子查询,但没有为其分配别名。下面是一个例子,删除
b
,重新构建并设置发生的情况。非常好。谢谢@JW——非常棒的答案和解决方案(这是我查询中的一个输入错误)