0

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

4

1 回答 1

0

I don't understand your question fully but hope my answer helps you a bit. Are you joining many tables? So let's say 2 tables and you want to sum up the quantity column?

First of all, JOIN performs the cartesian product of 2(or more) tables. So you'll get so many instances that you don't wish to have; the solution to this is using the WHERE.

Maybe this is what you are looking for:

SELECT sum(a.qty) + sum(b.qty)
FROM table1 a, table2 b
WHERE a.pk = b.fk -- this one resolves the unwanted instances

fk denotes foreign key and pk denotes primary key.

于 2014-02-19T08:52:15.173 回答