[英]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_costs
与products
表的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.