oracleでdistinctの使い方を詳しく説明します。

1768 ワード

まず例を見てみます。
テーブル
フィールド1     フィールド2    id。        name    1           a.    2           b    3           c    4           c    5           b
ライブラリの構造は大体このようです。これは簡単な例です。実際の状況はずっと複雑です。
例えば、nameが重複していないデータを一つの文で調べたいなら、distinctを使って余分な重複記録を削除しなければなりません。
select distinct name fromテーブルで得られた結果は、
--------
name    a.    b    c
効果があったようですが、私がほしいのはid値ですか?検索語句を変えましょう。

select distinct name, id from table
結果は:
--------
id name    1 a    2 b    3 c    4 c    5 b
distinctはどうして機能しませんでしたか?役割は果たしましたが、彼は同時に二つのフィールドを作用させました。つまり、idとnameが同じでないと除外されません。。。。。
検索語句を改めます。

 select id, distinct name from table
残念ですが、エラーメッセージ以外は何も得られません。distinctは最初に置いてください。distinctをwhere条件に入れることができないほど難しいですか?はい、そのまま間違いを申告します。
--------------------------------------------------------
以下の方法もいけません。

select *, count(distinct name) from table group by name
結果:

ORA-00979: not a GROUP BY expression
00979. 00000 - "not a GROUP BY expression"
依然としてエラーが発生しました 
group byはorder byとlimitの前に置かなければなりません。そうでないとエラーが発生します。
--------------------------------------------------------
これでいいと思います。

select max(id), name from table group by name;
結果:
id name
1  a.
2  b
4  c
5  d
使い方二:
一、データ:
1    zjx    001    AAA iBZAQA AAAVPAAA
2    zjx    002    AAAiBZAQA AAAVPAAB
3    zjx    001    AAA iBZAQA AAAVPAAC
二、マルチフィールド

select distinct t.name,t.code from test1 t
select distinct t.* from test1 t
結果:
1    zjx    001
2    zjx    002
三、単一フィールド

select distinct t.name from test1 t
結果:
1    zjx