gpt4 book ai didi

MYSQL delete - 表 'USER_TABLE' 被指定两次,既作为 'DELETE' 的目标,又作为单独的数据源

转载 作者:太空宇宙 更新时间:2023-11-03 10:37:10 24 4
gpt4 key购买 nike

我是 MySql 大型查询的新手,正在尝试为我的问题找到一些解决方案,

我想根据 USER_TABLE 中的 "ID_object" 列删除重复值。

这是我的 USER_TABLE 描述,

`USER_TABLE` (
`ID` varchar(256) NOT NULL,
`ID_OBJECT` varchar(256) DEFAULT NULL,
`INSERTION_TIME` date DEFAULT NULL,
KEY `USER_TABLE_inx01` (`ID`(255)),
KEY `user_inx02` (`ID_OBJECT`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我尝试了以下查询来删除重复的 ID_OBJECT,

delete from USER_TABLE  where id in (
select ID from USER_TABLE,
(select ID_OBJECT, min(INSERTION_TIME) as fecha from USER_TABLE group by ID_OBJECT having count(ID_OBJECT)>1) tbpr
where USER_TABLE.ID_OBJECT = tbpr.ID_OBJECT and USER_TABLE.INSERTION_TIME=tbpr.fecha);

但是它说, SQL 错误 (1093):表“USER_TABLE”被指定了两次,既作为“DELETE”的目标又作为单独的数据源

谁能帮我做这件事?

最佳答案

这样就可以了。我没有尝试检查您删除重复项的实际业务逻辑是否正确,因为您声明的要求无论如何都不是 100% 清楚,但这是您可以克服错误消息的一种方法:

CREATE TEMPORARY TABLE IF NOT EXISTS duplicates AS (
SELECT UT.id
FROM `USER_TABLE` AS UT
INNER JOIN
(SELECT
ID_OBJECT,
MIN(INSERTION_TIME) AS fecha
FROM `USER_TABLE`
GROUP BY ID_OBJECT
HAVING COUNT(ID_OBJECT)>1) AS tbpr
ON
UT.ID_OBJECT = tbpr.ID_OBJECT AND UT.INSERTION_TIME = tbpr.fecha
);

DELETE FROM `USER_TABLE`
WHERE id IN (SELECT id FROM duplicates);

DROP TABLE IF EXISTS duplicates;

您可以在此处查看工作演示:https://www.db-fiddle.com/f/amnAPUftLD1SmW67fjVSEv/0

关于MYSQL delete - 表 'USER_TABLE' 被指定两次,既作为 'DELETE' 的目标,又作为单独的数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46050048/

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