2017-09-05 101 views
1
Select 
    * 
from [myTable] 
WHERE [myTable].ID IN 
(
    Select 
     Min([myTable].ID), 
     [myTable].Username 
FROM [myTable] 
group by [myTable].Username); 

删除重复的记录给我的错误:我不知道它为什么给这个错误。在主键

You have written a subquery that can return more than one field without using EXISTS reserved word in the main query's FROM clause. Revise the Select statement of the subquery to request only one field

我用户名重复的记录,所以我想用的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 | 
+------+-------+-------+---------+--------------+ 
+0

向我们展示db模式,样本数据,当前和预期输出。 \t请阅读[**如何提问**](http://stackoverflow.com/help/how-to-ask) \t \t这里是一个伟大的地方[** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)来了解如何提高您的问题质量并获得更好的答案。 \t [**如何创建一个最小,完整和可验证的示例**](http://stackoverflow.com/help/mcve) –

+0

仍然需要预期的输出 –

+0

谢谢,它的工作。我猜在内部查询我们不应该使用用户名列,删除后,查询工作正常。谢谢胡安 –

回答

1

问题是你尝试用touple {Username, ID}

而是使用外值作为过滤器内部查询比较ID。

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

谢谢胡安,我只有单表。 –

+0

这是一个问题或我的答案解决您的问题? –

+0

我正在使用Access从主键删除重复项。我只有一个名为T1的表。我看到你在两张桌子上进行了连接。我只有T1,所以我应该如何执行子查询? –

0

试试这个:

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

我不知道很多关于MS的访问,但它需要一个列被选中,然后才能在GROUP BY使用它?

+0

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

相关问题