我试图实现这个query1
:
UPDATE temp_svn1 t set closedate=(select max(date) from temp_svn1 p where p.id=t.id
显然MySQL不允许这样的查询。所以我使用内部联接来提出这个查询,但这太慢了。如何为此编写更好的查询?或者如何实现query 1
的逻辑?
UPDATE temp_svn1 AS out INNER JOIN (select id, close from temp_svn1 T inner join (select id as cat, max(date) as close from temp_svn1 group by cat) as in where T.id = in.cat group by id ) as result ON out.id = result.id SET out.closedate = result.close
答案 0 :(得分:0)
由于mysql的特殊性,你要让它更快的唯一方法是将它分成两个语句。首先,获取最大值,然后在更新中使用它。这是一个已知的黑客攻击,而且,在一个声明中,没有“整洁”的方式。
答案 1 :(得分:0)
由于您的子查询只返回一个值,因此您可以分两个阶段进行查询。选择服务器端变量的max(date),然后在外部查询中重用该变量。当然,这会将事情分解为两个查询,它将不再是原子的。但是通过适当的交易/锁定,这就没有用了。
答案 2 :(得分:-1)
这有效:
UPDATE temp_svn1
set closedate = (select max(date) from temp_svn1 p where p.id = temp_svn1.id)