使用group by子句的SQL Update查询

Nag*_*ran 43 mysql sql

Name         type       Age
-------------------------------
Vijay          1        23
Kumar          2        26
Anand          3        29
Raju           2        23
Babu           1        21
Muthu          3        27
--------------------------------------
Run Code Online (Sandbox Code Playgroud)

编写查询以将每种类型的最大年龄人名更新为"HIGH".

还请告诉我,为什么以下查询无效

update table1 set name='HIGH' having age = max(age) group by type;
Run Code Online (Sandbox Code Playgroud)

Sve*_*ana 78

我已经改变了Derek的脚本,现在它适用于我:

UPDATE table1 AS t 
INNER JOIN 
(SELECT type,max(age) mage FROM table1 GROUP BY type) t1 
ON t.type = t1.type AND t.age = t1.mage 
SET name='HIGH'
Run Code Online (Sandbox Code Playgroud)

  • 缺点:即使存在外部`where`子句,这也实现了整个t1表. (3认同)
  • 这是 MySQL 所需的表单。更新部分中带有“FROM”的表单不起作用。 (2认同)
  • 不需要说`INNER``JOIN`,只要`JOIN`就足够了。在 MySQL 中,JOIN 默认为 INNER。 (2认同)
  • 如果`table1` 不是`TEMPORARY TABLE`,则此方法有效。如果是,您会遇到 [bug 10327](http://bugs.mysql.com/bug.php?id=10327)。 (2认同)
  • @EoghanM 确实如此。如果您不想那样,您需要先使用“GROUP BY”将“SELECT”放入“TEMPORARY TABLE”,然后在“UPDATE”中只使用“JOIN”那个“TEMPORARY TABLE”。 (2认同)

Der*_*omm 8

您不能直接在更新语句中使用group by.它必须看起来更像这样:

update t
set name='HIGH'
from table1 t
inner join (select type,max(age) mage from table1 group by type) t1
on t.type = t1.type and t.age = t1.mage;
Run Code Online (Sandbox Code Playgroud)

  • 为什么这个有这么多点赞。语法上是不是错了? (4认同)
  • @Surendhar尝试在`set`之前放置`inner join`:`UPDATE table1 AS t INNER JOIN(SELECT type,max(age)mage FROM table1 GROUP BY type)t1 ON t.type = t1.type AND t.age = t1.mage SET name ='HIGH' (3认同)