我有 3 个表:成员、产品、产品成本
我需要将这些表中的信息合并到一个表中。当我这样做时,我得到了太多的结果,我不知道为什么。
对于每种产品,都应该有成本,但可能没有。如果有产品但没有成本,我希望它将空值或零扔到这些列中。
以下是表结构:
成员表
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
,但我尝试使用不同的连接类型运行它,但我仍然没有看到正确的结果,如果没有这条线,我如何连接成本,因为没有直接关系?我已经在纸上草绘了这个图表,但我仍然不明白我做错了什么。我建立了一个较小的测试数据库来简化并再次尝试使用 100% 干净的数据并且仍然是相同的结果(来自的实际数据库很大,查询也很大,所以我在这里对其进行了简化以隔离结果并使其更易于使用)。
谁能帮我理解为什么这个加入不起作用?难道成本和产品本身没有直接关系?如果是这样,我不反对将两者直接联系起来,因为从技术上讲总是应该有成本,即使该成本在技术上是免费的。我只是继承了这个数据库设计,并且考虑到它们仍然通过 绑定到成员member_id
,我不明白为什么会发生这种情况。
提前感谢您提供的任何帮助!