1

免責事項:私はまだSQLを学んでいるので、私の質問がアマチュアっぽいものであるか、そうでなければ非常に単純な答えである場合は、お詫び申し上げます。正式なトレーニングはありません。私は自分自身を教えています。ありがとう。

テーブル内の重複を見つけるための適切なクエリを探しています。これが私が現在持っているものです:

SELECT[名前]

FROM [02Kids] As Tmp
GROUP BY [Name]
HAVING Count(*)> 1

名前で注文するasc

これはうまくいきます...ある種。特定の「名前」が複数回出現する結果を返します。それについての質問もありますが、それが発生する回数は関係ありません。

私が遭遇した問題は、これが実際にはより大きな更新クエリの一部であり、それも機能する一方で、私の複製がすべて「真に」複製ではないことに気付いたということです。

具体的には、名前が指定されている単純なselectクエリを使用して取得されたデータの例を次に示します。

結果の各セットのCustNo列に注意してください。「名前」は結果の各セットで一致しますが、CustNoは最初のセットで異なります。これらは同じ顧客に属していないため、真に重複しているわけではありません。

CustNoが同じである名前のみを返すために何らかの比較を実行できる方法はありますか?

4

3 に答える 3

3

他の列もに含める必要がありますGROUP BY

SELECT [Name],[CustNo], Count(*) AS [Count]
FROM [02Kids] As Tmp
GROUP BY [Name], [CustNo]
HAVING Count(*)>1
ORDER BY [Name] ASC, [CustNo] ASC, Count(*) DESC
于 2013-01-10T16:44:20.717 に答える
1
SELECT [Name], [LocNo]

FROM [02Kids] As Tmp
GROUP BY [LocNo]
HAVING Count(*)>1

order by Name asc

または、GROUPBY句に複数のフィールドを入力できる場合

SELECT [Name], [LocNo]

FROM [02Kids] As Tmp
GROUP BY [LocNo], [Name]
HAVING Count(*)>1

order by Name asc

名前だけを見たいですか?

SELECT [Name] from
( SELECT [Name], [LockNo]
  FROM [02Kids] As Tmp
  Group BY [LocNo]
  HAVING Count(*) > 1
)
于 2013-01-10T16:42:13.103 に答える
0

すべての重複を表示するには、次のことを試してください。

SELECT LocNo, CustNo, 02Kids.name FROM 02Kids
INNER JOIN (SELECT name FROM 02Kids
GROUP BY name HAVING count(*) > 1) dup 
ON 02Kids.name = dup.name;
于 2013-01-10T17:02:54.920 に答える