Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在mysql中使用内部联接或GROUPBY从两个表中获取所有平衡值?_Php_Mysql - Fatal编程技术网

Php 如何在mysql中使用内部联接或GROUPBY从两个表中获取所有平衡值?

Php 如何在mysql中使用内部联接或GROUPBY从两个表中获取所有平衡值?,php,mysql,Php,Mysql,我有两张桌子 表名称:年份 表名称:月份 预期产出: 我对上述输出使用下面的查询,但得到了意外的结果 SELECT a.id , SUM(a.no_of_units_purchase) FROM month a , year b WHERE a.id=b.id GROUP by b.id 上述查询的输出: 请引导我得到预期的结果 提前感谢。内部联接(如您所发现的)只返回两个表之间存在匹配的情况。可以使用外部联接返回一个表中的所有记录以及另一个

我有两张桌子

表名称:年份

表名称:月份

预期产出:

我对上述输出使用下面的查询,但得到了意外的结果

SELECT a.id
     , SUM(a.no_of_units_purchase) 
  FROM month a
     , year b 
 WHERE a.id=b.id 
 GROUP 
    by b.id
上述查询的输出:

请引导我得到预期的结果

提前感谢。

内部联接(如您所发现的)只返回两个表之间存在匹配的情况。可以使用外部联接返回一个表中的所有记录以及另一个表中的匹配记录

SELECT a.id
 , SUM(a.no_of_units_purchase), SUM(IFNULL(b.no_of_units, 0))
 , SUM(a.no_of_units_purchase) - SUM(IFNULL(b.no_of_units, 0))
FROM month a
LEFT JOIN year b 
  ON a.id=b.id 
GROUP by a.id
从您的示例中不清楚是否需要输出“年”表中有记录但“月”表中没有相应行的情况,但这也是可能的

一些DBMS支持“完全外部联接”,它返回两个表中的所有记录,并链接匹配的记录。MySQL不直接支持这一点,但很容易重新创建行为:

SELECT a.id
 , SUM(a.no_of_units_purchase), SUM(IFNULL(b.no_of_units, 0))
FROM month a
LEFT JOIN year b 
  ON a.id=b.id 
GROUP by a.id
UNION
SELECT b.id, 0, SUM(b.no_of_units)
FROM year b
LEFT JOIN month a
  ON b.id=a.id
WHERE a.id IS NULL
GROUP BY b.id
您应该使用左联接而不是简单联接,因为表month不能包含给定年份的购买。可行的查询是:

select year.id,
       year.no_of_units,
       sum(ifnull(month.no_of_units_purchase, 0)) as no_of_units_purchase,
       year.no_of_units - sum(ifnull(month.no_of_units_purchase, 0)) as balance_units
from   year
       left join month on year.id = month.id
group by
       year.id, 
       year.no_of_units
见: