Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将3个MySQL表合并到合并表中,结果过多_Mysql_Sql_Database_Multi Table_Consolidation - Fatal编程技术网

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

将3个MySQL表合并到合并表中,结果过多,mysql,sql,database,multi-table,consolidation,Mysql,Sql,Database,Multi Table,Consolidation,我有3个表:成员、产品、产品成本 我需要将这些表中的信息合并到一个表中。当我这样做的时候,我得到了太多的结果,我不知道为什么 每种产品都应该有成本,但可能没有。如果有一个产品,但没有成本,我希望它在这些列中抛出null或零 以下是表格结构: 成员表 产品表 产品成本表 以下是我在合并表中查找的内容: 合并表结构 为了达到目的,我编写了以下查询: SELECT M.member_id, M.first_name, M.last_name,

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

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

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

以下是表格结构:

成员表 产品表 产品成本表 以下是我在合并表中查找的内容:

合并表结构 为了达到目的,我编写了以下查询:

    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表中有一个成员的记录,我为该成员提供了5个产品,这也有5个成本。当我运行这个查询时,我得到了25个结果,我不知道为什么。我希望总共有5个结果,每个成员选择产品1行,包括成员详细信息和投入的成本。我得到的是每种产品1行,同一产品重复5行成本

问题似乎是
内部连接产品\u成本与PC上的PC.member\u id=M.member\u id
,但我尝试过使用不同的连接类型运行它,但我仍然看不到正确的结果,如果没有这条线,我如何连接成本,因为没有直接关系?我已经在纸上画了一些图表,但我仍然不明白我做错了什么。我已经建立了一个较小的测试数据库来简化,并用100%干净的数据和相同的结果再次尝试了它(实际的数据库是巨大的,查询是巨大的,所以我在这里对它进行了简化,以隔离结果并使其更容易使用)

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


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

您缺少将
产品成本
加入
表的
条件:

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
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
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