私は 3 つのテーブルを持っています: members、products、product_costs
これらのテーブルの情報を 1 つのテーブルに統合する必要があります。これを行うと、あまりにも多くの結果が得られますが、その理由はわかりません。
すべての製品にコストがかかるはずですが、そうでない場合もあります。製品はあるがコストがかからない場合、それらの列にヌルまたはゼロをスローする必要があります。
テーブル構造は次のとおりです。
メンバー表
member_id first_name last_name
製品表
product_id member_id product_date
製品原価表
product_cost_id member_id product_cost_amount
統合テーブルで探しているものは次のとおりです。
連結表の構造
member_id first_name last_name product_id product_date product_cost_amount
そこにたどり着くために、次のクエリを書きました。
SELECT
M.member_id,
M.first_name,
M.last_name,
P.product_id,
P.product_date,
PC.product_cost_amount
FROM
members AS M
INNER JOIN products AS P ON P.member_id = M.member_id
INNER JOIN product_costs AS PC ON PC.member_id = M.member_id
これにより、必要なすべての列が返されますが、これは問題ではありません。members テーブルにメンバーの 1 つのレコードがあり、そのメンバーに 5 つの製品があり、これにも 5 つのコストがあるとします。このクエリを実行すると、25 件の結果が得られますが、その理由はわかりません。メンバーの詳細とコストが投入された、メンバーが選択した製品ごとに 1 行の合計 5 つの結果が期待されます。得られるのは、製品ごとに 1 行で、同じ製品のコストが 5 行繰り返されます。
問題は のようですがINNER JOIN product_costs AS PC ON PC.member_id = M.member_id
、さまざまな結合タイプで実行してみましたが、まだ正しい結果が表示されず、直接関係がないため、その行がないとコストをどのように接続すればよいですか? これを紙にスケッチしましたが、何が間違っているのかまだわかりません。簡素化するために小さなテスト データベースを構築し、100% クリーンなデータで再試行しましたが、結果は同じです (実際のデータベースは巨大であり、クエリは大規模であるため、結果を分離するためにここで単純化しました作業しやすくなります)。
この結合が機能しない理由を理解するために誰か助けてもらえますか? コストと製品自体には直接関係がないのではないでしょうか? もしそうなら、たとえ技術的には無料であっても、技術的には常にコストがかかるはずなので、2つを直接リンクすることに反対しません. 私はこのデータベース設計を継承しているだけでありmember_id
、.
あなたが提供できる助けを前もってありがとう!