Mysql 使用内部联接2查询的结果不准确

Mysql 使用内部联接2查询的结果不准确,mysql,Mysql,我想加入下面的2个查询: SELECT DISTINCT kdbaes1, kdsatker, FORMAT (ABS(SUM(rphreal)),0) AS pagu FROM budget WHERE thnang='2013' AND jnsdok1 IN('202','203') GROUP BY kdsatker ORDER BY kdbaes1, kdsatker; 及 我尝试加入这些查询,但结果在实际列中并不准确 SELECT DISTI

我想加入下面的2个查询:

SELECT DISTINCT kdbaes1, kdsatker, 
                FORMAT (ABS(SUM(rphreal)),0) AS pagu 
FROM budget 
WHERE thnang='2013' AND jnsdok1 IN('202','203') 
GROUP BY kdsatker 
ORDER BY kdbaes1, kdsatker;

我尝试加入这些查询,但结果在实际列中并不准确

SELECT DISTINCT budget.kdbaes1, budget.kdsatker, 
                FORMAT (ABS(SUM(budget.rphreal)),0) AS rpbudget, 
                FORMAT (SUM(real.rphreal),0) AS rpreal 
 FROM budget 
 INNER JOIN real ON budget.kdsatker=real.kdsatker
 WHERE budget.thnang='2013' AND budget.jnsdok1 IN('202','203') AND
       real.thnang='2013' AND real.jnsdok1='301' AND real.kdmakmap LIKE '5%' 
 GROUP BY kdsatker  
 ORDER BY kdbaes1, kdsatker;

需要帮助。

我正在根据我认为你想要达到的目标进行猜测

  SELECT DISTINCT budget.kdbaes1, budget.kdsatker, 
                    FORMAT (ABS(SUM(budget.rphreal)),0) AS rpbudget, 
                    FORMAT (SUM(real.realisasi),0) AS rpreal 
     FROM budget 
     INNER JOIN 
     (SELECT DISTINCT kdbaes1, kdsatker, 
                FORMAT (SUM(rphreal),0) AS realisasi  
      FROM real 
      WHERE thnang='2013' AND jnsdok1='301' AND kdmakmap LIKE '5%' 
      GROUP BY kdsatker
     ) real on real.kdbaes1 = budget.kdbaes1 AND real.kdsatker = budget.kdsatker 

     WHERE budget.thnang='2013' AND budget.jnsdok1 IN('202','203') 
     GROUP BY kdsatker  
     ORDER BY kdbaes1, kdsatker;
在连接示例中,您似乎试图对两个单独的表进行求和


我所做的是接受第二个查询,并将其作为子查询来执行实表的求和。然后,我们使用此子查询与预算表连接…

多亏了Sparky…,我尝试使用real.realisasi作为rpreal修改您在第3行的查询,结果非常准确。谢谢…@bonnetdenny如果你不知道为什么要使用DISTINCT,你需要停止使用DISTINCT。充其量,您是在浪费服务器的时间检查结果集是否清晰,而不可能不清晰,最坏的情况是,您掩盖了效率低下或逻辑错误,并可能得到错误的答案。DISTINCT不太可能适用于GROUP BY或SUM等聚合函数。除非你明白你需要它的确切原因,否则不要使用它。@michael谢谢你提供的信息。是的,我删除了distinct,结果是一样的。对不起,如果我的英语不好:
  SELECT DISTINCT budget.kdbaes1, budget.kdsatker, 
                    FORMAT (ABS(SUM(budget.rphreal)),0) AS rpbudget, 
                    FORMAT (SUM(real.realisasi),0) AS rpreal 
     FROM budget 
     INNER JOIN 
     (SELECT DISTINCT kdbaes1, kdsatker, 
                FORMAT (SUM(rphreal),0) AS realisasi  
      FROM real 
      WHERE thnang='2013' AND jnsdok1='301' AND kdmakmap LIKE '5%' 
      GROUP BY kdsatker
     ) real on real.kdbaes1 = budget.kdbaes1 AND real.kdsatker = budget.kdsatker 

     WHERE budget.thnang='2013' AND budget.jnsdok1 IN('202','203') 
     GROUP BY kdsatker  
     ORDER BY kdbaes1, kdsatker;