クエリー重複レコードの処理

1944 ワード

需要1:
oracleデータベースでは、テーブルtableにフィールドA、B、C、D、Eがあり、tableに対してクエリーを行い、クエリーの結果、A、Bの2つのフィールドの値が同じである複数のレコードが1つしか表示されないことを要求します.
 
次の表に示します.
A
B
C
D
E
李明
2013-5-23
X
Y
Z
李明
2013-5-23
M
N
K
李華
2013-5-23
X
Y
Z
張三
2013-5-23
X
Y
Z
 
次のように表示されます.
A
B
C
D
E
李明
2013-5-23
X
Y
Z
李華
2013-5-23
X
Y
Z
張三
2013-5-23
X
Y
Z
 
groupbyで実現でき、
select A, B from table group by A,B;
次のような結果が得られます.
A
B
李明
2013-5-23
李華
2013-5-23
張三
2013-5-23
 
 
groupbyの後にselectに集約関数ではないすべてのフィールドが表示されます.クエリー結果にフィールドC、D、Eを同時に表示するには、クエリー文を少し変更して、フィールドC、D、Eを集約関数に変換する必要があります.
 
select A,B,min(C),min(D),min(E) from table group by A,B;

 
 
(select A,B,C,D,E from table group by A,Bを直接使用すると、構文エラーが表示されます)
需要2:
テーブルtableのフィールドAに重複するレコードがあることをクエリーして表示します.
 
次の表に示します.
A
B
C
D
E
李明
2013-5-23
X
Y
Z
李明
2013-5-23
M
N
K
李華
2013-5-23
X
Y
Z
張三
2013-5-23
X
Y
Z
 
次のように表示されます.
A
B
C
D
E
李明
2013-5-23
X
Y
Z
李明
2013-5-23
M
N
K
 
解決方法:
select * from table where A in(select A from table group by A having count(A)>1)