Mysql Join和Group by子句给出了错误的输出

Mysql Join和Group by子句给出了错误的输出,mysql,sql,join,group-by,Mysql,Sql,Join,Group By,我有两个带列的表L(Code,Qtr,Fy,Limit)和带列的表R(Code,Qtr,Fy,Limit)。我想通过代码得到左右表组的限制之和,Qtr和Fy 下面的查询运行时没有错误,但给出了错误的输出,有人能帮我获得正确的输出吗。如果我只用一张桌子,它就可以了。我想问题在于join select L.Code, L. Qtr, L.FY, sum(L.limit),sum(R.Limit) from tbl L,tbl R Where L.Code=R.Code AND L.Qtr=R.Qt

我有两个带列的表L(Code,Qtr,Fy,Limit)和带列的表R(Code,Qtr,Fy,Limit)。我想通过代码得到左右表组的限制之和,Qtr和Fy

下面的查询运行时没有错误,但给出了错误的输出,有人能帮我获得正确的输出吗。如果我只用一张桌子,它就可以了。我想问题在于join

select L.Code, L. Qtr, L.FY, sum(L.limit),sum(R.Limit) 
from tbl L,tbl R Where
L.Code=R.Code AND
L.Qtr=R.Qtr AND
L.FY=R.FY
group by L.Code,L.Qtr,L.FY
示例数据(该表也包含其他列,但这里我只保留选中项)

我正在使用Mysql,请尝试以下查询:

select code, qtr, fy, sum(lsum), sum(rsum)
from (
select L.Code, L.Qtr, L.FY, L.limit as lsum, 0 as rsum
from L
union all
select R.Code, R.Qtr, R.FY, 0 as lsum, R.limit as rsum
from R) as combined
group by code, qtr, fy

在这种情况下使用
join
将是一个错误的想法,因为它将创建多个记录(L和R之间的每个匹配一个记录),然后当你进行
求和时,你会得到错误的结果。

问题确实是连接-具体地说,你会遇到问题,因为你在连接后使用了
GROUP BY
,当联接条件导致非唯一行时。通常,解决此问题的方法是在连接之前对进行分组:

SELECT L.code, L.qtr, L.fy, L.lim as L_lim, R.lim as R_lim
FROM (SELECT code, qtr, fy, SUM(lim) as lim
      FROM L
      GROUP BY code, qtr, fy) L
JOIN (SELECT code, qtr, fy, SUM(lim) as lim
      FROM R
      GROUP BY code, qtr, fy) R
  ON R.code = L.code
     AND R.qtr = L.qtr
     AND R.fy = L.fy
(有一个)


请注意,这将仅显示两个表中的行的结果。另外,
LIMIT
是一个保留字(在MySQL和其他一些RDBMS中),所以你最好避免在列名中使用它。

你在使用什么?Sql server还是Mysql?您希望得到什么样的输出?您能发布一些示例数据吗?还有,预期的输出是什么?阿吉特什么时候告诉我他希望两个表的总和都在一列中?不,我不能这样做,因为我必须把它们分开。此外问题是一样的,结果比实际值要多,实际上它是数量的两倍,所以我猜问题在于joinThank!!这也应该有效,但我使用了以前的方法
SELECT L.code, L.qtr, L.fy, L.lim as L_lim, R.lim as R_lim
FROM (SELECT code, qtr, fy, SUM(lim) as lim
      FROM L
      GROUP BY code, qtr, fy) L
JOIN (SELECT code, qtr, fy, SUM(lim) as lim
      FROM R
      GROUP BY code, qtr, fy) R
  ON R.code = L.code
     AND R.qtr = L.qtr
     AND R.fy = L.fy