我不确定为啥会出现此错误。删除主键中的重复记录

Posted

技术标签:

【中文标题】我不确定为啥会出现此错误。删除主键中的重复记录【英文标题】:I am not sure why it's giving this error. Remove duplicate records in Primary Key我不确定为什么会出现此错误。删除主键中的重复记录 【发布时间】:2017-09-05 21:28:11 【问题描述】:
Select 
    *
from  [myTable]
WHERE  [myTable].ID IN
(
    Select 
        Min( [myTable].ID ),  
        [myTable].Username
FROM [myTable]
group by [myTable].Username);

给我错误:

您编写的子查询可以返回多个字段,而无需在主查询的 FROM 子句中使用 EXISTS 保留字。修改子查询的Select语句,只请求一个字段

我在用户名中有重复的记录,所以我试图通过使用 ID 号的 MIN 来消除它们,因为用户名中的第一条记录是正确的。有人可以帮忙或告诉我去哪里看吗?

+------+-------+-------+---------+--------------+
| Data |  id   | Fname |  Lname  |   Status     |
+------+-------+-------+---------+--------------+
|    1 | 12345 | Kunal | Kumar   | completed    |
|    2 | 12345 | Kunal | Kumar   | Not Started  |
|    3 | 12346 | Rahul | Malviya | Completed    |
|    4 | 12346 | Rahul | Malviya | Not Started  |
+------+-------+-------+---------+--------------+

【问题讨论】:

向我们展示数据库架构、示例数据、当前和预期输出。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。 How to create a Minimal, Complete, and Verifiable example 仍然需要预期的输出 谢谢,它成功了。我猜在内部查询中我们不应该使用用户名列,删除它之后,查询工作正常。谢谢胡安 解决问题记得采纳答案 【参考方案1】:

问题是您尝试将 ID 与一个 Username, ID 进行比较

相反,您使用外部值作为内部查询的过滤器。

SELECT *
FROM [myTable] T1
WHERE  T1.ID =
     (SELECT Min( T2.ID )
      FROM [myTable] T2
      WHERE T2.Username = T1.Username);

【讨论】:

谢谢胡安,我只有一张桌子。 我正在使用 Access 从主键中删除重复项。我只有一个名为 T1 的表。我看到您已经在两个表上执行了联接。我只有T1,子查询应该怎么执行? 我只使用了一个表[myTable],但分配了不同的别名t1和t2,这样我就可以使用子查询的结果了。 感谢您的澄清,我执行了您的查询,但它只返回一条记录,我需要 Username 中的所有记录都是唯一的。这就是我想使用 group by 的原因,每个用户名将有 2 条记录,然后 Min 函数将拾取 ID 最低的一条,并删除重复项。那么我们可以在 Sub 查询中使用 group by,在 Outer 查询中我们可以使用 * 来选择所有列。现在更清楚了吗?谢谢 不清楚,请给我一个真实数据的例子【参考方案2】:

试试这个:

Select 
    *
from  [myTable]
WHERE  [myTable].ID IN
(
    Select 
        Min( [myTable].ID ) 
FROM [myTable]
group by [myTable].Username);

我对 MS Access 了解不多,但是否需要先选择一列才能在 GROUP BY 中使用它?

【讨论】:

非常感谢 Corid,它确实运作良好,我非常感谢你。干杯!

以上是关于我不确定为啥会出现此错误。删除主键中的重复记录的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能删除此 SQL Server 表 [重复]

很菜的数据库问题,主键的值允许重复吗?外键啥作用?

mysql主键对应的值不能重复

MySQL 处理重复数据:防止表中出现重复数据统计过滤删除重复数据

为啥保留重复记录时h2复合主键不起作用?

怎么删除ACCESS中的重复记录 只保留一条