【发布时间】:2014-03-19 10:32:54
【问题描述】:
我需要从几个定期更新库存的仓库中汇总数量。这些文件会自动加载到我的 MySQL 数据库中的表中,但有时一个仓库的文件可能比其他仓库多或少。我需要将它们全部添加,以确定整个网络的可用总量。
我的想法是:
SELECT
IFNULL(branch_01.qty,0) +
IFNULL(branch_02.qty,0) +
IFNULL(branch_03.qty,0) +
等等。通过所有仓库加入:
FROM branch_01
JOIN branch_02
USING (oespaced)
JOIN branch_03
USING (oespaced)
等等。通过所有仓库
我不能使用 LEFT JOIN 或 RIGHT JOIN,因为有时一个仓库可能缺少条目,有时另一个仓库可能缺少条目。如果一个分支的文件中缺少 sku,我希望仍然将其他分支添加在一起,并且只获得一个 NULL,它将通过 SELECT 中的函数转换为 0。当我测试了不同的连接解决方案时,我似乎也得到了笛卡尔行数,这让我更加困惑。 非常感谢任何指导。
稍微澄清一下: 我们需要加入 17 个表。我们并不真正关心列的总和,而是更关心单个值。例如,一个表可能表示项目 a、b、c、d 的列表,并列出数量为 1、2、3、4。我们会从几个不同的仓库中获得该表,并且我们需要找到整个网络的总数。如果四个仓库具有这些值,我们希望看到 a、b、c、d 和 4、8、12、16 作为可用总数的值。
【问题讨论】:
-
我明白为什么 LEFT JOIN 和 RIGHT JOIN 对您不起作用 - 但您是否尝试过 FULL OUTER JOIN?
-
我认为 FULL OUTER JOIN 将是一个很好的解决方案,但据我了解,MySQL 不支持,它将通过在左侧执行 LEFT JOIN 和 RIGHT JOIN 来实现在右边。
-
感谢您的澄清 - 不幸的是,它仍然很不清楚。我认为一个具体的例子(表 t1 有列 c1、c2 和值(v1a、v2a)、(v1b、v2b),表 t2 有列......等)会有所帮助。无论如何,如果正确的解决方案是 FULL OUTER JOIN,而在 MySQL 中你做不到,那么模拟它(正如你自己提到的)。
标签: mysql join left-join union right-join