我不确定为啥会出现此错误。删除主键中的重复记录
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,它确实运作良好,我非常感谢你。干杯!以上是关于我不确定为啥会出现此错误。删除主键中的重复记录的主要内容,如果未能解决你的问题,请参考以下文章