mysql - 如何合并多个不同行的 MySQL 表?

标签 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,该 NULL 会被 SELECT 中的函数转换为 0。当我测试不同的连接解决方​​案时,我似乎也得到了笛卡尔行数,这让我更加困惑。 非常感谢任何指导。

稍微澄清一下: 我们需要连接 17 个表。我们并不真正关心列的总和,而是更关心各个值。例如,表格可能表示项目 a、b、c、d 的列表,并列出数量 1、2、3、4。我们将从几个不同的仓库获得该表,并且需要找到整个网络的总计。如果四个仓库具有这些值,我们希望看到 a、b、c、d 以及 4、8、12、16 作为可用总数的值。

最佳答案

我不太明白你的问题,但希望我的回答对你有一点帮助。 您要加入很多 table 吗?假设有 2 个表,您想要对数量列求和?

首先,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 表示主键。

关于mysql - 如何合并多个不同行的 MySQL 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21874660/

相关文章:

Mysql,检查数组组合是否存在(线程参与者)

php sql 在选中复选框时获取查询

mysql - 使用 INSTR() 连接 mySQL 中的表

mysql - mysql 查询上的 LEFT JOIN 没有得到我想要的结果

php - MySQLi 查询默默失败,但在 SQL shell 中成功

sql - INNER JOIN ON 与 WHERE 子句

mysql - 连接表 CakePHP

sql - Postgresql中根据条件获取上一条记录

mysql - mysql中的跨表查询包括COUNT和LEFT JOINS

mysql - 从 2Tables-Mysql 中删除通用 id 时发现问题