我需要从几个仓库中编制数量,定期更新库存。这些文件会自动加载到我的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为可用总量的值。
答案 0 :(得分:0)
我完全不明白你的问题,但希望我的回答对你有所帮助。 你加入很多桌子吗?那么让我们说两个表,你想要总结数量列?
首先,JOIN
执行2(或更多)表的笛卡尔积。因此,您将获得许多您不希望拥有的实例;对此的解决方案是使用WHERE
。
也许这就是你要找的东西:
SELECT sum(a.qty) + sum(b.qty)
FROM table1 a, table2 b
WHERE a.pk = b.fk -- this one resolves the unwanted instances
fk表示外键,pk表示主键。