外连接,按功能分组功能

时间:2014-10-14 15:39:11

标签: sql

我有两张桌子 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余额。但输出是反对的。

2 个答案:

答案 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关键字。