【问题标题】:SQLITE3 - Deleting rows that have multiple columns of the same valueSQLITE3 - 删除具有相同值的多列的行
【发布时间】:2018-07-23 07:45:29
【问题描述】:

我有一个 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 是一个整数。

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    您遇到了语法错误,因为您的 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
    );
    

    对于每个唯一的 (user_id, num) 组合,子查询将返回最高的 id。然后我们只删除所有其他行。 IE。在您的示例中,子查询将返回 2、3、4、5 作为“正确”,这将导致删除第 1 行。

    【讨论】:

      猜你喜欢
      • 2022-12-17
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      相关资源
      最近更新 更多