2017-09-05 13 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 [** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t [**スタート**] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)質問品質を改善し、より良い回答を得る方法を学ぶことができます。 \t [**最小限の完全で検証可能な例を作成する方法**](http://stackoverflow.com/help/mcve) –

+0

はまだ期待される出力が必要です –

+0

ありがとうございました。私はInnerクエリでUsernameカラムを使用すべきではないと思っていますが、それを削除してもクエリは正常に動作しています。ありがとうJuan –

答えて

1

問題は、あなたが代わりにあなたが内側のクエリのフィルタとして外の値を使用touple {Username, ID}

でIDを比較してみてくださいです。私はMSのアクセスについて多くを知らない

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

それはあなたがGROUP BYでそれを使用する前に、選択される列を必要としない:

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

Juanに感謝、私は単一のテーブルしかありません。 –

+0

これは質問ですか、私の答えはあなたの問題を解決していますか? –

+0

私は主キーから重複を削除するためにAccessを使用しています。私はT1という名前のテーブルしか持っていません。私はあなたが2つのテーブルの結合を実行したのを見る。私はT1しか持っていないので、どのようにサブクエリを実行すべきですか? –

0

これを試してみてください?

+0

Coridさん、ありがとうございました。本当にうまくいきました。とても感謝しています。乾杯! –

関連する問題