繁体   English   中英

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

[英]Merging 3 MySQL Tables Into Consolidated Table Getting Too Many Results

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

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

对于每种产品,都应该有成本,但可能没有成本。 如果有一种产品,但没有成本,我希望它向这些列中扔空或零。

表结构如下:

会员表

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条线,并包含成员详细信息和投入的成本。我得到的是每个产品1条线,重复相同产品的5条线。

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

有人可以帮我了解为什么此联接不起作用吗? 成本与产品本身之间可能没有直接关系吗? 如果是这样,我不反对直接将两者链接,因为从技术上讲,即使从技术上讲该费用是免费的,也应该始终是一项费用。 我只是继承了这种数据库设计,并且鉴于它们仍然通过member_id与成员绑定,所以我不明白为什么会这样。

预先感谢您提供的任何帮助!

您缺少product_costsproducts表的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM