MYSQL 左联接遗漏了行

MYSQL left join missing out rows

我有 4 张桌子。

1st table has: date and revenue
2nd table has: date and cost
3rd table has: date and fees 
4th table has: date and others

我正在使用以下公式计算最终收入值:

final = revenue - (cost + fees + others)

为了执行此操作,我在对所有这 4 个表执行左外连接时使用合并操作。由于连接顺序在左外很重要,所以当没有收入或成本时,我错过了费用。 Join order is revenue => cost => fees => others tables on date.

如果收入/成本缺失但费用/其他存在,我如何在缺失日期显示这些缺失的行?

我认为你需要:

SELECT `date`,  COALESCE(t1.revenue, 0) 
              - COALESCE(t2.cost, 0) 
              - COALESCE(t3.fees, 0) 
              - COALESCE(t4.others, 0) final
FROM ( SELECT `date` FROM t1
       UNION 
       SELECT `date` FROM t2
       UNION 
       SELECT `date` FROM t3
       UNION 
       SELECT `date` FROM t4 ) dates
LEFT JOIN t1 USING (`date`)
LEFT JOIN t2 USING (`date`)
LEFT JOIN t3 USING (`date`)
LEFT JOIN t4 USING (`date`)

如果date列在每个table中未定义为唯一(客户端检查是不够的!)那么你必须添加GROUP BY并对输出表达式中的每个钱 (?) 列使用 SUM()。