ホームページ  >  記事  >  php教程  >  Oracle 独自の使用法

Oracle 独自の使用法

高洛峰
高洛峰オリジナル
2016-12-13 09:33:071468ブラウズ

distinct キーワードは、冗長な重複レコードを除外して 1 つだけを保持するために使用されますが、多くの場合、一意のレコードのすべての値を返すために使用されるのではなく、一意のレコードの数を返すためにのみ使用されます。その理由は、distinct は二重ループ クエリによってのみ解決できるためであり、これは間違いなく、非常に大量のデータを含む Web サイトの効率に直接影響します。

例を見てみましょう:

テーブル table

フィールド 1 5 b

これは単純な例ですが、実際にはさらに複雑になります。

たとえば、1 つのステートメントを使用して、重複しない名前を持つすべてのデータをクエリする場合は、distinct を使用して冗長な重複レコードを削除する必要があります。

select unique name from table 結果は次のとおりです:

----------

name a b c

効果は得られたようですが、取得したいのはID値ですか?クエリステートメントを変更します:

select unique name, id from table

結果は次のようになります:

----------

id name 1 a 2 b 3 c 4 c 5 b

Distinct が機能しないのはなぜですか?これは機能しますが、同時に 2 つのフィールドに影響します。つまり、除外するには ID と名前が同じである必要があります。 。 。 。 。 。 。

再度クエリステートメントを変更してみましょう:

select id、distinct name from table

残念ながら、エラー情報以外は何も取得できません。distinct は先頭に置く必要があります。 where条件にdistinctを入れるのはそんなに難しいですか?はい、それでもエラーが報告されます。

------------------------------------------------ -------------------------------------------------- ----------

次のメソッドは実行できません:

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

結果:

ORA-00979: not a GROUP BY 式
00979。00000 - 「GROUP BY 式ではありません」

それでもエラーが報告されます

order by と limit の前に group by を配置する必要があります。そうしないとエラーが報告されます

- ----- -------------------------------------- ----- -------------------------------------- ----- -

これは実現可能だと思います

名前でグループ化されたテーブルからmax(id)、名前を選択します;

結果:

id name

1 a

2 b

4日

5日


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。