mysql INNER JOIN上的值错误

| 我在gfee和netpay上获得了错误的价值。
SELECT s.id, s.name, c.name AS course_name,
s.open_bal AS open_balance, sum(i.amount) AS gross_fee,
sum(i.discount) AS discount, sum(i.amount) - sum(i.discount) AS net_payable,
SUM(r.reg_fee+r.tut_fee+r.other_fee) AS net_recieved,
(sum(i.amount) - sum(i.discount)) - SUM(r.reg_fee+r.tut_fee+r.other_fee) AS balance_due
FROM subscribers s
INNER JOIN courses c on c.id = s.course_id
LEFT JOIN invoices i on i.student_id = s.id
LEFT JOIN recipts r on r.student_id = s.id
GROUP BY s.id;
为什么会这样呢?     
已邀请:
SELECT s.id
     , s.name
     , c.name AS course_name
     , s.open_bal AS open_balance
     , igroup.gross_fee
     , igroup.discount
     , igroup.net_payableinvoices
     , rgroup.net_recieved
     , igroup.net_payableinvoices - rgroup.net_recieved
       AS balance_due
FROM students s
INNER JOIN courses c
  on c.id = s.course_id
LEFT JOIN 
  ( SELECT i.student_id
         , SUM(i.amount) AS gross_fee
         , SUM(i.discount) AS discount
         , SUM(i.amount) - sum(i.discount)
           AS net_payableinvoices
    FROM invoices i
    GROUP BY i.student_id
  ) AS igroup
  ON igroup.student_id = s.id
LEFT JOIN 
  ( SELECT r.student_id
         , SUM(r.reg_fee+r.tut_fee+r.other_fee)
           AS net_recieved
    FROM recipts r 
    GROUP BY r.student_id
  ) AS rgroup
  ON rgroup.student_id = s.id
;
    
造成问题的最可能原因是其中一个联接表中存在多个行。 因为您得到的正好是预期值的两倍(70000与35000),所以我猜在
courses
recipts
表中有两行带有
student_id=22
。     
70,000是35,000的两倍是一个非常重要的线索。您说的是5英镑,而您得到的是预期的两倍。这强烈表明您要加入的行数是您认为的两倍。 在不知道模式细节的情况下,很难具体说明,但是如果要对
invoices
中的每一行(分别针对此特定记录)连接到
receipts
中的两个不同行,则最终会包含两个
35,000
条目。你的钱不是你的想法。     

要回复问题请先登录注册