如何解决优化删除SQLite3中具有最高用户ID或rowid的重复行之一?
我在删除属于 a) 同一用户或 b) 不同用户的重复行时遇到了一些问题。
对于情况 a) 我想删除其中一个重复的行,对于情况 b) 我想删除具有最高用户 ID 的行。
示例
在下表中,我有 2 个重复的行,一个是代码 A,问题是 1;一个带有代码 B 和问题 1。代码 B 由 2 个不同的用户“拥有”,在这种情况下我想删除用户 2,因为他们拥有最高的用户 ID。
对于代码为 A 的行;我想删除其中一行。由于它们是相同的,我只想要该行的 1 个副本。
+--------+------+-------+
| UserID | Code | Issue |
+--------+------+-------+
| 1 | A | 1 |
+--------+------+-------+
| 1 | A | 1 |
+--------+------+-------+
| 1 | B | 1 |
+--------+------+-------+
| 2 | B | 1 |
+--------+------+-------+
想要的结果
+--------+------+-------+
| UserID | Code | Issue |
+--------+------+-------+
| 1 | A | 1 |
+--------+------+-------+
| 1 | B | 1 |
+--------+------+-------+
我之前曾尝试使用:
create table temp_data as
select t.*
from data t
where t.id = (select max(t2.id)
from data t2
where t2.code = t.code and t2.issue = t.issue
);
作为 proposed 步骤 1 的一部分,但无法处理情况 a)。我可以做些什么来处理 a) 重复行的情况?
解决方法
虽然您的表似乎没有 PRIMARY KEY
,但您可以使用列 rowid
和列 UserID
来决定将删除哪些行:
DELETE FROM Data
WHERE EXISTS (
SELECT 1
FROM Data d
WHERE d.Code = Data.Code AND d.Issue = Data.Issue
AND (d.rowid < Data.rowid OR d.UserID < Data.UserID)
)
参见demo。
。
结果:
用户名 | 代码 | 问题 |
---|---|---|
1 | A | 1 |
1 | B | 1 |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。