【问题标题】:Delete a record's duplicates but leave 1 (without Identifier) [duplicate]删除记录的重复项但保留 1(没有标识符)[重复]
【发布时间】:2013-08-06 03:37:59
【问题描述】:

假设我们有这些数据:

rc_id      phonenumber
1               0
2               0
5               1
5               3
5               3
5               3 

我想删除匹配rc_id(共 5 个)和phonenumber(共 3 个)的记录,同时至少保留其中 1 个

最终结果应该是:

rc_id      phonenumber
1               0
2               0
5               1
5               3

注意:我不想使用唯一标识符

我目前正在使用此语句,但我注意到这也会删除所有其他重复项。

cmd.CommandText = "DELETE FROM tbl_data WHERE rc_id='5' AND phonenumber='3'";

【问题讨论】:

  • 该问题不适用于 SQLite。
  • @xperator 你试过上面的链接吗?
  • @EhsanUllah 我刚读过它,我有点明白它是如何工作的。但是其中使用的语句没有WHERE 子句。它使用了GROUP BY,我不知道它是如何工作的。我认为那里的 OP 想要删除整个数据库中的任何重复项

标签: c# sqlite duplicate-removal


【解决方案1】:

设置行数 1 从 tbl_data 中删除 其中 rc_id='5' AND phonenumber='3'

【讨论】:

【解决方案2】:

您可能会使用 RowNumber() over()

delete from tbl_data where  Rownumber() Over(partition by rc_id, phonenumber Order by rc_id) > 1

【讨论】:

  • 这在 SQLite 中不起作用。
  • 啊错过了那个标签,抱歉
【解决方案3】:

这个呢:

cmd.CommandText = "DELETE FROM tbl_data WHERE rc_id='5' AND phonenumber='3'
                   LIMIT (SELECT COUNT(*)-1 FROM tbl_data WHERE rc_id='5' AND phonenumber='3')";

【讨论】:

  • 这在 SQLite 中不起作用。
  • 对不起,也错过了sqlite标签...编辑答案...
  • LIMIT 出现语法错误,原因。
  • LIMIT on DELETE 是默认不启用的可选扩展。请参阅 EhsanUllah 的链接以获取可行的解决方案。
  • 链接的解决方案(参见 EhsanUllah)不起作用,因为这里没有可用的唯一标识符。
猜你喜欢
  • 2020-10-07
  • 2012-07-21
  • 2017-02-12
  • 2015-09-27
  • 2019-12-20
  • 2021-11-16
  • 2014-12-23
  • 2020-12-23
  • 1970-01-01
相关资源
最近更新 更多