結合クエリを使用する場合、たとえばテーブル 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 が左結合を使用すると、右側のテーブルのデータに重複したデータが含まれます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 サイトの他の関連記事を参照してください。