如何组合不同行的几个MySQL表?

时间:2014-02-19 08:17:03

标签: mysql join left-join union right-join

我需要从几个仓库中编制数量,定期更新库存。这些文件会自动加载到我的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为可用总量的值。

1 个答案:

答案 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表示主键。