0

私は 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、.

あなたが提供できる助けを前もってありがとう!

4

1 に答える 1

2

テーブルにjoin条件がありません:product_costsproducts

FROM members M INNER JOIN
     products P
     ON P.member_id = M.member_id INNER JOIN
     product_costs PC
     ON PC.member_id = M.member_id AND
        PC.product_id = P.product_id
于 2015-03-01T14:18:04.247 に答える