我有两个银行数据库表。一个是客户列表,另一个是帐户列表。当我离开外部加入客户帐户时,我有没有任何客户记录。我怎样才能为他们打印零?
SQL> CREATE TABLE Customer (
2 BSB# CHAR(6) NOT NULL, /* Bank BSB number */
3 Customer# NUMBER(10) NOT NULL, /* Customer number */
4 Name VARCHAR2(30) NOT NULL, /* Customer name */
5 DOB Date, /* Date of birth */
6 Sex CHAR, /* M-Male, F-Female */
7 Address VARCHAR2(50) NOT NULL, /* Customer address */
8 Phone# VARCHAR2(15), /* Phone number */
9 CONSTRAINT Project_PK PRIMARY KEY(BSB#, Customer#),
10 CONSTRAINT Project_FK FOREIGN KEY (BSB#) REFERENCES Bank(BSB#)
11 );
SQL> CREATE TABLE Account (
2 BSB# CHAR(6) NOT NULL, /* Bank BSB number */
3 Customer# NUMBER(10) NOT NULL, /* Customer number */
4 Account# NUMBER(10) NOT NULL, /* Account number */
5 Type VARCHAR2(20) NOT NULL, /* Account type */
6 Balance NUMBER(10,2) NOT NULL, /* Account balance */
7 CONSTRAINT WorksOn_PK PRIMARY KEY(BSB#, Account#),
8 CONSTRAINT WorksOn_FK1 FOREIGN KEY(BSB#, Customer#) REFERENCES Customer(BSB#, Customer#)
9 );
命令:
select c.name, CUS.MYSUM
from customer c
left outer join
(
select customer#,sum(balance) MYSUM
from account
group by customer#
) CUS
on c.customer# = CUS.customer#;
输出:
NAME MYSUM
------------------------------ ----------
Ben -470211.09
Mike -470211.09
Jean -60028.03
Douglas 1970.35
Josef 1970.35
Duke 54469.12
Alex -323631.76
Harry
Will
我想在哈利和威尔面前打印 0?
将您的第一个查询行更改为
select c.name, COALESCE(CUS.MYSUM, 0)
COALESCE
是一个标准的 sql 函数,它返回其参数中第一个表达式的值,该表达式的计算结果为 NULL。如果没有这样的表达式,它将返回 NULL。
搜索的 CASE
表达式提供类似的功能:
select c.name, CASE WHEN CUS.MYSUM IS NULL THEN '0' ELSE CUS.MYSUM END
优点是:
- 在非空情况下使用的实际值不必是检查列的值
- 你可以测试任意表达式
价格为
- 可读性较差
- 性能影响(通常可以忽略不计,在复杂的查询结果集投影中[即
选择
列]花费的处理时间最少)。
引用:mysql 5.0 doc on COALESCE
我是一名优秀的程序员,十分优秀!