oracleでdistinctの使い方を詳しく説明します。
まず例を見てみます。
テーブル
フィールド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値ですか?検索語句を変えましょう。
--------
id name 1 a 2 b 3 c 4 c 5 b
distinctはどうして機能しませんでしたか?役割は果たしましたが、彼は同時に二つのフィールドを作用させました。つまり、idとnameが同じでないと除外されません。。。。。
検索語句を改めます。
--------------------------------------------------------
以下の方法もいけません。
group byはorder byとlimitの前に置かなければなりません。そうでないとエラーが発生します。
--------------------------------------------------------
これでいいと思います。
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
二、マルチフィールド
1 zjx 001
2 zjx 002
三、単一フィールド
1 zjx
テーブル
フィールド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