将 3 MySQL Table 合并为合并的 Table 得到太多结果

Merging 3 MySQL Tables Into Consolidated Table Getting Too Many Results

我有 3 个 table:会员、产品、product_costs

我需要将这些 table 中的信息合并为一个 table。当我这样做时,我得到了太多的结果,我不确定为什么。

每种产品都应该有成本,但也可能没有。如果有产品但没有成本,我希望它在这些列中抛出空值或零。

这里是 table 结构:

会员Table

member_id       first_name      last_name

产品Table

product_id      member_id       product_date

产品成本Table

product_cost_id     member_id       product_cost_amount

这是我在综合 table 中寻找的内容:

综合Table结构

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

这将 return 我想要的所有列,这不是问题所在。假设我在成员 table 中有一个成员的 1 条记录,并且我有该成员的 5 个产品,也有 5 个成本。当我 运行 这个查询时,我得到了 25 个结果,我不确定为什么。我预计总共有 5 个结果,每个成员选择的产品有 1 行,其中包含成员详细信息和成本。我得到的是每个产品有 1 行,同一产品有 5 行成本重复。

问题似乎是 INNER JOIN product_costs AS PC ON PC.member_id = M.member_id,但我已经尝试 运行 将其与不同的连接类型结合使用,但我仍然没有看到正确的结果,如果没有那条线,我该如何连接成本因为没有直接关系?我已经在纸上绘制了草图,但我仍然不明白我做错了什么。我已经构建了一个较小的测试数据库来简化并使用 100% 干净的数据再次尝试它并且结果仍然相同(这来自实际的数据库是巨大的并且查询是巨大的所以我在这里简化它以隔离结果并使其更易于使用)。

谁能帮我理解为什么这个连接不起作用?难道成本和产品本身没有直接关系?如果是这样,我不反对直接将两者联系起来,因为从技术上讲,应该总是有成本,即使该成本在技术上是免费的。我只是继承了这个数据库设计,并且考虑到它们仍然通过 member_id 绑定到成员,我不明白为什么会这样。

提前感谢您提供的任何帮助!

您缺少 product_costsproductsjoin 条件 table:

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