将3个MySQL表合并到合并表中,结果太多



我有3个表:成员、产品、product_costs

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

对于每一个产品,都应该有成本,但可能没有。如果有产品,但没有成本,我希望它在这些列中抛出null或零。

以下是表格结构:

成员表

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

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

问题似乎是INNER JOIN product_costs AS PC ON PC.member_id = M.member_id,但我已经尝试过用不同的联接类型运行它,但我仍然没有看到正确的结果,如果没有这一行,我如何连接成本,因为没有直接关系?我已经在纸上画了这方面的示意图,但我仍然不明白我做错了什么。我建立了一个较小的测试数据库来简化,并用100%干净的数据再次尝试,结果仍然相同(实际数据库很大,查询量很大,所以我在这里简化了它,以隔离结果,使其更容易使用)。

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

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

您在products表的product_costs上缺少一个join条件:

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

相关内容

  • 没有找到相关文章

最新更新