質問: 'yahoo' ORDER BY $order LIMIT $st, $lim;"; ``` 何度も修正をしては確認を繰返しておりますが、解決の糸口が見えないための質問です。 お忙しい中恐縮ですが、アドバイスのほど、よろしくお願いいたします。
回答: まず念頭に置いて欲しいのですが、 テーブルを結合してレコードが増殖する原因としては、 1. 結合キーが不足している 2. 一意だと思っていたデータにダブりがある 上記の2パターンしかありえません。 それを踏まえたうえで今回のクエリを見ると、 ``` SELECT mailbox.mail_no , mail.mail_account_id , mail.mailbox_title , mail.mailbox_address , customer.cust_id , customer.cust_account_id , customer.cust_tanntousha_no , customer.cust_name , customer.cust_mail , tanntousha.tanntou_no , tanntousha.tanntou_account_id , tanntousha.tanntou_name FROM mail LEFT JOIN customer ON mail.mail_address = customer.cust_mail -- メールアドレスがダブっていると分裂 LEFT JOIN tanntousha ON customer.cust_tanntousha_no = tanntousha.tanntou_no WHERE mail.mail_account_id = 'google' ``` サンプルも誤っている可能性が高いですが、 顧客テーブルで同一メールアドレスデータが存在しているので、 これが正しいならここが分裂の要因と思われます。 もう1点気になったのがメールテーブルと顧客テーブルの結合キーについて、 アカウントIDは結合キーに含まれておりませんが、 これはつまり**メールアカウントIDと顧客アカウントIDは一致しなくてもよい**というルールとなっていますが正しい仕様なのでしょうか? その点を確認した方が良いかもしれません。 ### 蛇足 **顧客名が決まってもメールアドレスは一意とならない場合は以下読み飛ばしてください。** 顧客テーブル上の顧客名、メールアドレスのペアは常に変わらない、 つまり**顧客名が決まればメールアドレスが一意に定まる**状況の場合、 今の顧客テーブルは**1事実1箇所の原則**に違反しており第1正規形の状態のテーブルとなるので、 可能であればもう一段階正規化を進めることをお勧めします。 (※更新時不整合を防止する意味で)