テーブルとテーブルの間の接続の問題にMySQLクエリ

3つの接続

一つ:2つのテーブルが、実際には、そのような番号01、表1及び表2に報告された唯一のものとして、非常にまれな1対1の関係であります

多く:表1の01に表示され、2つの偶数多くのレコードは、表2、より一般的なビジネスの現実に表示されたレコード数など

多くの多く:名前が示すように、レコード数がより多くの二つの表のそれぞれに何度も現れると結合クエリは、実際のビジネスケース、エラーとダブルカウント、矛盾につながる、このように服用すれば、ビジネスは珍しい、個人的な経験が、あります。

多対ケース例:
電気サプライヤデータER図
タイトル:レッツは10の都市がトップの最強の購買力を見つける
を指す矢印に、それらに注意を払うを対応させることができるユーザーIDのuserinfoによって2つのテーブル間、都市とuseraddress ORDERINFOテーブルに表示されますが同じトークン、ユーザIDもuseraddressで複数の受信者を有することができ、よりそのユーザー情報ユーザ(ユーザID)よりORDERINFO注文にペンが何度もあるだろう、と対応するように、受注にユーザーIDを受注できるか一つでありますアドレス、受信者のアドレスには、いくつかのいくつかの対応するユーザーIDがあります表示されます。実際ORDERINFOユーザー、同じuseraddressアドレス、およびORDERINFOが共有ユーザIDフィールド、典型的な、多くの接続を介してクエリに参加useraddress場合は、各レコードのORDERINFOはそれぞれすべて同じユーザーIDと同じユーザID useraddressですコネクタは、すなわち、相互接続が繰り返され、同じアドレスが対応するコネクタとは異なるアドレスであり、結果は、実際のエラーと矛盾しました。ORDERINFOは直接問い合わせ、コードを見ることができます:

select b.city,sum(OrderAmount) c from orderinfo a join
	useraddress b on a.userid=b.userid  	-- 错误写法,此为多对多,重复计算
    group by b.city
    order by c desc
    limit 10;
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200129135441875.png)

結果は以下の通りであります:
ここに画像を挿入説明

--正确写法:
select city,sum(OrderAmount) c from orderinfo
    group by city
    order by c desc
    limit 10;

結果は以下の通りであります:
ここに画像を挿入説明

元の記事を公開 ウォンの賞賛0 ビュー7

おすすめ

転載: blog.csdn.net/reed_rxs/article/details/104105854