この記事では、SQL での unique キーワードの 4 つの使用法 (コード例) を紹介します。必要な方は参考にしていただければ幸いです。
mysql を使用する場合、一意のフィールドを持つレコードをクエリする必要がある場合があります。mysql には、重複するレコードをフィルターして 1 つだけ保持するための unique キーワードが用意されていますが、多くの場合、重複レコードの数を返すために使用されます。重複レコードのないすべての値を返すために使用するのではなく、重複レコードを使用します。その理由は、distinct はターゲット フィールドのみを返すことができ、他のフィールドを返すことができないためです。この問題は、distinct で解決できない場合は、二重ループ クエリで解決するしかありません。大量のデータの場合は、間違いなく効率に直接影響します。そこで私はこの問題を調べるのに多くの時間を費やしましたが、オンラインで解決策を見つけることができませんでした。その結果、私たちは二人とも落ち込んでいました。最初に例を見てください:
table
id name
1 a
2 b
3 c
4 c
5 b
ライブラリの構造は大まかに次のとおりです。これは単なる例です。実際の状況はさらに複雑になります。
たとえば、1 つのステートメントを使用して、重複しない名前を持つすべてのデータをクエリする場合は、distinct を使用して冗長な重複レコードを削除する必要があります。
select distinct name from table
得られた結果は、
name
a
b
c
効果が得られたようですですが、取得したいのはid値ですか?クエリ ステートメントを変更します:
select distinct name, id from table
結果は次のようになります:
id name
1 a
2 b
3 c
4 c
5 b
なぜ個別に機能しないのでしょうか?これは機能しますが、同時に 2 つのフィールドに影響します。つまり、除外するには ID と名前が同じである必要があります。 。 。 。 。 。 。
クエリ ステートメントを再度変更してみましょう:
select id, unique name from table
残念ながら、エラー情報以外は何も取得できません。distinct は次の場所に配置する必要があります。始まり 。 where条件にdistinctを入れるのはそんなに難しいですか?はい、それでもエラーが報告されます。 。 。 。 。 。 。
面倒ですか?実際、あらゆる努力をしてもこの問題は解決できませんでした。誰かに問い続けるしかない。
社内の JAVA プログラマーを捕まえて、Oracle での distinct の使用方法を教えてもらいましたが、MySQL では解決策が見つかりませんでした。最後に、退社する前に、group by を試してみたらどうかと提案してくれました。 。
長い間試してみましたが、最終的に、mysql マニュアルで group_concat(distinct name) を使用して必要な機能を実現しました。とても興奮しています。神のご加護がありましたら、できるだけ早く試してみます。
エラー報告。 。 。 。 。 。 。 。 。 。 。 。押し下げられた。 。 。 。 。 。 。 mysql マニュアルさえ私には理解できませんでした。それは私に最初は希望を与えましたが、その後はとても残酷でした。 。 。 。
注意深く調べた結果、group_concat 関数は 4.1、halo、私は 4.0 でサポートされています。他に方法はありません。アップグレードして、アップグレード後に試して、成功します。 。 。 。 。 。
ようやく完了しましたが、その後、お客様にもアップグレードを依頼する必要があります。
ふと、group_concat関数が使えるから他の関数も使えるのではないか?
急いで count 関数を試してみてください。うまくいきました。 。 。 。 。 。 。泣きたいです、大変な努力が必要でした。 。 。 。 。 。 。 。それはとても簡単だということが分かりました。 。 。 。 。 。
ここで完全なステートメントを解放します:
select *, count(distinct name) from table group by name
結果:
id name count(distinct name)
1 a 1
2 b 1
3 c 1
以上がSQL での unique キーワードの 4 つの使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。