2013-02-02 194 views
1

我有2个表更新记录

表A如下:

ID NAME VALUE 
1 abc 0 
2 lmn 0 
3 xyz 0 

B表如下:

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 

我想更新表A,方法是将表列中的VALUE列设置为表B中的最大值,方法是匹配ID列,但仅针对Category2或Category 3中的表B中的值。

MySQL查询可能是什么样的?

+0

这将是一个子查询的更新。看起来非常简单。但是,这取决于你使用的是哪个版本的SQL ..? – Rob

+0

这是您想要的按需调用,还是您希望TableA总是**具有所描述的最大值? – leftclickben

+0

我正在运行MySQL:5.1.67 @Rob –

回答

1
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 
+0

谢谢@JW ...我现在就试试这个。 –

+0

获取此消息“每个派生表都必须有自己的别名”继续工作 –

+0

@ H.Ferrence我很确定你的查询有一些错字吗?你可以展示给我看,这样我们可以解决它吗? ':D'上面的查询在小提琴上工作。 –