gpt4 book ai didi

mysql - ORDER BY 和 DELETE 不起作用

转载 作者:行者123 更新时间:2023-11-30 01:33:31 24 4
gpt4 key购买 nike

我编写了这个删除查询来从表中删除重复的条目,但是当我运行这个查询时,它将保留旧行并删除最新行。我想保留最新插入的行并删除旧的行。我已在删除查询中附加了 ORDER BY 子句,但它不起作用。

DELETE t2
FROM user_deprovision t1
JOIN user_deprovision t2 ON (
t2.UserName = t1.UserName AND
t2.GroupName = t1.Groupname AND
t2.id > t1.id)
ORDER BY t1.DeletedDate;

我怎样才能实现这个目标。

最佳答案

让我们编写一个查询,返回用户名和组名的最新时间。

SELECT
UserName, GroupName, MAX(deprovision_time)
FROM
user_deprovision
GROUP BY
UserName, GroupName

现在,让我们根据您的目的进行调整。在 Oracle 中,我可能会做一些事情将其转换为临时表,但我将在这里使用相关子查询。

DELETE FROM user_deprovision AS dp1
WHERE dp1.deprovision_time <
ANY (SELECT deprovision_time FROM user_deprovision AS dp2
WHERE dp1.UserName = dp2.UserName
AND dp1.GroupName = dp2.GroupName);

我们可以将其转变为联接。

SELECT dp1.id
FROM user_deprovision AS dp1
JOIN user_deprovision AS dp2
ON dp1.UserName = dp2.UserName
AND dp1.GroupName = dp2.GroupName
WHERE
dp1.deprovision_time < dp2.deprovision_time

对应的删除是:

DELETE FROM user_deprovision
WHERE id IN (
SELECT dp1.id
FROM user_deprovision AS dp1
JOIN user_deprovision AS dp2
ON dp1.UserName = dp2.UserName
AND dp1.GroupName = dp2.GroupName
WHERE
dp1.deprovision_time < dp2.deprovision_time);

关于mysql - ORDER BY 和 DELETE 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17184314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com