SQLITE3-删除具有相同值的多列的行

时间:2018-07-23 07:45:30

标签: sqlite

我有一个SQLite3数据库,我想从该数据库中删除具有两个值相同的字段的行。 看来我可以通过以下查询选择此类值:
SELECT * FROM mydb GROUP BY user_id, num HAVING COUNT(*) > 1
但是我无法删除它们。
DELETE FROM mydb WHERE user_id IN (SELECT * FROM mydb GROUP BY user_id, num HAVING COUNT(*) > 1)
返回语法错误。

这是我的期望:

示例:

id  user_id     num
1   1           1
2   1           1
3   2           1
4   1           2
5   2           2

在此示例中,id 1和2的两列(user_id和num)具有相同的值,因此应将其删除。最好,但不一定,我想有一个解决方案,只留下一个这样的行(与哪一行无关)。

结果:

id  user_id     num
2   1           1
3   2           1
4   1           2
5   2           2

注意:id是主键。 user_id是外键。 num是一个整数。

1 个答案:

答案 0 :(得分:1)

您遇到语法错误,因为您的IN运算符的左侧是一个单一值(user_id),而右侧则是一个非单值行的表格({{1} }。比较喜欢SELECT *避免它。

无论如何,这是一个删除所有最新消息的查询:

WHERE user_id IN (SELECT user_id ...)

子查询将为每个唯一的DELETE FROM mydb WHERE id NOT IN ( SELECT MAX(id) FROM mydb GROUP BY user_id, num ); 组合返回最高的id。然后,我们只删除所有其他行。即在您的示例中,子查询将返回2、3、4、5为“正确”,这将导致删除第1行。