【问题标题】:Update row that has the current highest (max) value of one field [closed]更新具有一个字段的当前最高(最大值)值的行[关闭]
【发布时间】:2023-04-04 15:48:01
【问题描述】:

我有这个 sql 查询,这是错误的。我想更新 wins 表中的字段“prevmonth”,但只更新字段“month_wins”的最大值的记录。

UPDATE wins 
SET prevmonth_top=1 
WHERE month_wins = (SELECT MAX(month_wins) FROM wins)

但是我该怎么做呢?

【问题讨论】:

  • 这有什么问题?有什么错误吗?
  • Yes, "#1093 - 您不能在 FROM 子句中指定目标表 'wins' 进行更新"

标签: mysql sql


【解决方案1】:

试试这个技巧,

UPDATE wins
SET prevmonth_top=1 
ORDER BY month_wins DESC
LIMIT 1

或者类似的,

UPDATE IGNORE giveaways 
SET winner = 1 
WHERE month_wins = (select maxID from (SELECT MAX(ID) maxID FROM giveaways) as t)

You can't specify target table 'table_name' for update in FROM clause相同

【讨论】:

  • FWIW:第一个解决方案很好很简短,但要非常小心不要在最后省略“限制 1”!
【解决方案2】:

运行以下查询,它可能会有所帮助:

UPDATE wins 
SET prevmonth_top=1  WHERE month_wins = 
(
      SELECT month_wins FROM (SELECT MAX(month_wins) FROM wins) AS month_wins
) 

【讨论】:

  • 更加简单明了!好家伙!
  • 次要问题:month_wins 在很多地方的使用使这个答案变得不那么清晰。我会将嵌套选择更改为(SELECT maxWin FROM (SELECT MAX(month_wins) maxWin FROM wins) AS t)。这阐明了maxWin 是最大值,而不是对字段month_wins 的另一个引用,并且t 是任意临时名称。
猜你喜欢
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多