ホームページ  >  記事  >  データベース  >  左結合接続を使用して mysql の重複問題を解決する方法

左結合接続を使用して mysql の重複問題を解決する方法

王林
王林転載
2023-06-02 13:13:412844ブラウズ

    Mysql は左結合を使用して繰り返し接続します。

    問題の説明

    結合クエリを使用する場合、たとえばテーブル A がメインです。 table 、テーブル B への接続を残します。クエリ結果にはテーブル A と同じ数のレコードが含まれることが期待されます。ただし、クエリされたレコードの総数がレコードの総数よりも多くなる結果が生じる可能性があります。テーブル A. で、クエリ結果が表示されると、いくつかの列が繰り返され、簡単に言えば、デカルト積が生成されます。

    質問例

    テーブル A はユーザー テーブル (ユーザー) で、フィールドは次のとおりです:

    ID name userid
    1 aaaa 10001
    2 bbbb 10002
    3 ccccc 10003

    B テーブルは最初のタイプの製品テーブル (product) であり、フィールドは次のとおりです:

    ID title time userid
    1 タイトル 1 2014-01-01 10002
    2 タイトル 2 2014-01-01 10002
    3 タイトル 3 2014-01-01 10001
    4 タイトル 4 2018-03-20 10002
    5 Title 5 2018-03-20 10003

    このとき、以下のSQLを使用して実行したところ、

    selecct * from user left join product on user.userid=product.userid;

    左結合接続を使用して mysql の重複問題を解決する方法

    # #実行結果は実際にはユーザー テーブルの総レコード数よりも多かった 多くの

    問題の解決策

    実は、この問題は目の肥えた人なら一目でわかります。左結合のキーワードは積テーブル内で一意ではないため、一意でないデータのこの部分によってデカルト積が生成され、予想よりも多くの実行結果が得られます。

    解決策は、一意のキーを使用して関連付けてクエリをリンクすることです

    mysql が左結合を使用すると、右側のテーブルのデータに重複したデータが含まれます

    LEFT JOIN キーワードは、右側のテーブル (table_name2) に一致する行がない場合でも、左側のテーブル (table_name1) のすべての行を返します。このとき、右側のテーブル(table_name2)にデータが無い場合、または on キーワードで絞り込んだ後にデータが 1 つしかない場合は問題ありません。

    今回話したいのは、右側のテーブル(table_name2)のデータが重複した場合(ビジネスにおける完全な重複)の対処方法です。

    右テーブル(table_name2)をonキーワードで絞り込み、重複データが現れた場合、このとき見つかるデータは、右テーブルデータ*重複データ、右テーブルのその他の条件データ、必要なデータの項目数が異なります。

    私の解決策は、最初にフィルター フィールド グループに従って正しいテーブル (table_name2) をクエリし、同じデータをフィルターで除外してから、その結果を関連付けの正しいテーブルとして扱うことです

    前面脑补 
    LEFT JOIN (SELECT MODEL_CODE,MODEL_NAME from tm_model GROUP BY MODEL_CODE) tm on tav.model_code = tm.MODEL_CODE 
    后面脑补

    以上が左結合接続を使用して mysql の重複問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。