mysql での重複排除の 2 つの方法の詳細な例

怪我咯
リリース: 2017-07-05 11:08:18
オリジナル
2613 人が閲覧しました

この記事では、主に mysql の 2 つの重複排除方法とサンプルコードの関連情報を紹介します。必要な方は、

mysql を参照してください。

方法 1:

MySQL

を使用する場合、特定のフィールドのレコードの重複をクエリする必要がある場合があります。ただし、mysqlには、冗長な重複レコードをフィルタリングして1つだけを保持するための個別のキーワードが用意されていますが、多くの場合、重複しないレコードのすべての値を返すために使用されるのではなく、一意のレコードの数を返すためにのみ使用されます。その理由は、distinct はターゲット フィールドのみを返すことができ、otherfields
を返すことはできないためです。まず例を見てみましょう:

   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
ログイン後にコピー

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


もう一度クエリ ステートメントを変更しましょう:

select id, distinct name from table
ログイン後にコピー

残念ながら、

エラー メッセージ

以外は何も取得できません。distinct は先頭に置く必要があります。 where条件にdistinctを入れるのはそんなに難しいですか?エラーを報告できます。 。 。 。 。 。 。
最後の有用なステートメントは次のとおりです:

select *, count(distinct name) from table group by name
ログイン後にコピー

結果:

  id name count(distinct name)
  1 a 1
  2 b 1
  3 c 1
ログイン後にコピー

最後の項目は冗長です。そのままにしておいてください。目的は達成されています。 。 。 。 。


そうそう、ところで、group by は order by と limit の前に置く必要があります。そうしないと、エラーが報告されます。 。 。 。 。 。 。 。 ! OK


概要ステートメント:

select *, count(distinct name) from (select * from table... およびその他のネストされたステートメント) 名前でグループ化


方法 2:


group by

SELECT * FROM( 
select * from customer where user=( 
  SELECT source_user from customer WHERE user='admin') UNION ALL select * from customer where user=( 
  select source_user from customer where user=( 
    SELECT source_user from customer WHERE user='admin')) union ALL select * from customer where user=( 
  select source_user from customer where user=( 
    select source_user from customer where user=( 
      SELECT source_user from customer WHERE user='admin'))) UNION ALL select * from customer where source_user=(/*我的上线的上线的user*/ 
  select user from customer where user=( 
    select source_user from customer where user=( 
      SELECT source_user from customer WHERE user='admin'))) union all select * from customer where source_user=(/*我的上线的上线的上线user*/ 
  select user from customer where user=( 
  select source_user from customer where user=( 
    select source_user from customer where user=( 
      SELECT source_user from customer WHERE user='admin'))))) as alias group by user;
ログイン後にコピー
を使用する

エイリアスを追加する場合は注意してください。追加しない場合は、where ステートメントの外側でラップすることに注意してください。その後、group by を使用して重複を削除して有効にします。

以上がmysql での重複排除の 2 つの方法の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート