我有两张桌子 IDNO
idno head head_desc
1 6001-1 medical expense
2 6001-2 pay
3 6001-3 gas expenses
view9
head receipt payment
6001-1 5000 1000
6001-2 7000 2000
6001-1 6000 1000
查询
select i.head, i.head_desc, nvl(sum(v.receipt)-sum(v.payment),0) balance
where
v.head=i.head(+)
group by i.head,i.head_desc
此查询应检索idno表中的所有头,如果未找到记录为外连接,则显示0余额。但输出是反对的。
答案 0 :(得分:0)
SELECT idno.head, head_desc, COALESCE(SUM(receipt)-SUM(payment),0) AS balance
FROM idno LEFT OUTER JOIN view9 ON idno.head=view9.head
GROUP BY idno.head, head_desc
答案 1 :(得分:0)
我不知道您使用的是哪种DBMS ......但我猜您使用的是Oracle。 我建议你不要使用(+)运算符,因为它不是表达连接操作的标准方法。
我想你想打印出idno表中的每一行,如果没有v.head在idno表中有一个值(例如6001-3),那么打印0(null)作为余额值。这样对吗? 左外连接意味着“打印出左侧表中每行的信息。 因此,如果你想打印每个i.head和i.head_desc,那么你必须写 i.head = v.head(+)。
无论如何,我建议你使用LEFT OUTER JOIN关键字。