使用密钥对更新记录

时间:2014-03-27 16:19:00

标签: mysql sql

我需要更新User表记录,其中max endDate替换为值为null的用户。 null将指示特定用户记录是当前记录。解释:此表跟踪每个用户的时间变化。这就是我现在正在做的事情。它可以工作,但CONCAT可能是密集的。还有另外一种比这更快的方法吗?游标肯定比较慢。已经试过了。

db是mysql

USE CUSTOMER;
CREATE TEMPORARY TABLE IF NOT EXISTS keyValuePairs
SELECT `user`, MAX(endDate)as mEndDate FROM `User` GROUP BY `user`;

UPDATE `User` SET `endDate` = NULL
WHERE CONCAT(`user`, `endDate`) IN 
(SELECT CONCAT(`user`, `mEndDate`) FROM keyValuePairs); 

2 个答案:

答案 0 :(得分:1)

更快,你可以避免制作一个不必要的临时表:

UPDATE `User` u
LEFT JOIN `User` maxUser ON u.user = maxUser.user AND maxUser.endDate > u.endDate
SET u.`endDate` = NULL
WHERE maxUser.user IS NULL;

对于没有相应用户行且具有更大endDate的用户行,这将把endDate设置为NULL - 这将是该用户的最大endDate。

使用SQLFiddle here

答案 1 :(得分:0)

更快的方法是不使用功能。尝试这样的事情:

update user
set enddate = null
from user u join keyvaluepairs k on u.user = k.user
and u.enddate = k.menddate