使用子查询进行MySQL更新,错误1093

时间:2014-01-08 17:51:35

标签: mysql sql subquery

我试着在这里搜索,但没有运气。没有什么似乎是同一个问题。

我有这个选择:

SELECT a.whse, a.sku, a.data, a.dt_exp FROM volume_hist_fin a
WHERE a.data = (
  SELECT MAX(b.data)
  FROM volume_hist_fin b
  WHERE b.md5_skuwhse = a.md5_skuwhse
 )
GROUP BY whse, sku, a.data

有效。我现在正在尝试更新。此更新:

UPDATE volume_hist_fin a SET a.dt_exp = '2013-10-09'
WHERE a.data = (
  SELECT MAX(b.data) 
  FROM volume_hist_fin b
  WHERE b.md5_skuwhse = a.md5_skuwhse
 )

但是我收到了错误:

  

1093“您无法在FROM子句”

中为更新指定目标表'a'

所有问题都是子查询需要使用相同的id代码获取最大数据(md5_skuwhse)

如何使此更新生效?

1 个答案:

答案 0 :(得分:2)

您可以使用JOIN

执行此操作
UPDATE volume_hist_fin a JOIN
(
  SELECT md5_skuwhse, MAX(data) max_data
    FROM volume_hist_fin
   GROUP BY md5_skuwhse
) b
    ON a.md5_skuwhse = b.md5_skuwhse
   AND a.data = b.max_data
   SET a.dt_exp = '2013-10-09'