SQLITE3 - 删除具有相同值的多个列的行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLITE3 - 删除具有相同值的多个列的行相关的知识,希望对你有一定的参考价值。
我有一个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是INTEGER。
答案
您遇到语法错误,因为您的IN
运算符左侧有一个值(user_id
),而右侧有一个非单值行的表(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
组合,子查询将返回最高的(user_id, num)
。然后我们只删除所有其他行。即在您的示例中,子查询将返回2,3,4,5作为“正确”,这将导致删除第1行。
以上是关于SQLITE3 - 删除具有相同值的多个列的行的主要内容,如果未能解决你的问题,请参考以下文章