如何解决MySQL Delete Distinct - IE 保持任何重复删除的唯一性
大家好,第一次发帖者,但之前在这个平台上的人们有过一些很棒的想法。 刚刚学习并开始将 MySQL 用于大型数据库,但发现了一个问题,我无法找到有关如何执行此操作的答案。
我的表结构如下:
|dt|ID|Location ID|
|--|--|-----------|
|21/03/2021 10:57:12|ab123|1234|
|21/03/2021 10:57:12|ab127|19826|
|21/03/2021 10:57:12|ab123|1721|
|21/03/2021 10:57:12|ab124|7656|
|21/03/2021 10:57:12|ab130|1001|
|21/03/2021 10:57:12|ab335|1991|
|21/03/2021 10:57:12|ab123|0010|
我想要做的是删除所有具有匹配的单个 ID 的条目。本质上删除任何不同的 ID。
所以这将返回:
|dt|ID|Location ID|
|--|--|-----------|
|21/03/2021 10:57:12|ab123|1234|
|21/03/2021 10:57:12|ab123|1721|
|21/03/2021 10:57:12|ab123|0010|
命令 DELETE(Distinct 'ID') from table;理想情况下是我想要做的,但这是无效的?
解决方法
使用子选择获取应该删除的ID
CREATE TABLE table1
(`dt` varchar(19),`ID` varchar(5),`Location ID` int)
;
INSERT INTO table1
(`dt`,`ID`,`Location ID`)
VALUES
('21/03/2021 10:57:12','ab123',1234),('21/03/2021 10:57:12','ab127',19826),1721),'ab124',7656),'ab130',1001),'ab335',1991),0010)
;
DELETE FROM table1 WHERE ID IN (seLECt `ID` FROM (SELECT ID FROM table1) t1 GROUP BY ID HAVING COUNT(*) = 1)
SELECT * FROM table1
dt | ID | Location ID :------------------ | :---- | ----------: 21/03/2021 10:57:12 | ab123 | 1234 21/03/2021 10:57:12 | ab123 | 1721 21/03/2021 10:57:12 | ab123 | 10
dbfiddle here
此版本带有 inner join
CREATE TABLE table1
(`dt` varchar(19),0010)
;
DELETE table1 FROM table1
INNER JOIN (seLECt `ID` FROM (SELECT ID FROM table1) t1 GROUP BY ID HAVING COUNT(*) = 1) t1
ON table1.ID = t1.ID
;
SELECT * FROM table1
dt | ID | Location ID :------------------ | :---- | ----------: 21/03/2021 10:57:12 | ab123 | 1234 21/03/2021 10:57:12 | ab123 | 1721 21/03/2021 10:57:12 | ab123 | 10
dbfiddle here
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。