如果该值不可用,则显示 'NA'
To display 'NA' if the value is not available
我有这段代码可以显示度假村 ID、度假村名称、经理姓名和他的 phone 号码以及显示 'NA' 经理姓名和 phone 号码的条件,如果它不可用。
select r.resortid, r.resortname, nvl(m.name, 'NA') as managername, nvl(m.phone, 'NA') as phoneno
from resort r inner join manager m
on r.managerid = m.managerid
order by r.resortid;
此代码的结果符合我的预期,但未显示 'NA' 行。是否使用了“NVL”关键字,错了吗?因为它是 Oracle SQL 我使用了那个关键字。请建议它是否有任何错误。提前致谢。
如果没有经理,就没有行。为什么?因为你加入了那些 table。应该有 OUTER 加入他们,即
from resort r left join manager m on ...
如 littlefoot 所述,您应该使用 LEFT JOIN 而不是 INNER JOIN.
LEFT JOIN关键字returns左边的所有记录table(resort),以及右边的匹配记录table (经理)。如果没有匹配,则结果从右侧开始为 NA。
Oracle 11g R2 架构设置:
create table resort
(
resortid char(5),
resortname varchar(25),
managerid char(5)
);
create table manager
(
managerid char(5),
name varchar(25),
phone char(7)
);
insert into resort values('r1', 'Resort 1', 'm1');
insert into resort values('r2', 'Resort 2', 'm2');
insert into manager values('m1', 'R.Manager One', '001-123');
查询 1:
select r.resortid, r.resortname, nvl(m.name, 'NA') as managername, nvl(m.phone, 'NA') as phoneno
from resort r left outer join manager m
on r.managerid = m.managerid
order by r.resortid
| RESORTID | RESORTNAME | MANAGERNAME | PHONENO |
|----------|------------|---------------|---------|
| r1 | Resort 1 | R.Manager One | 001-123 |
| r2 | Resort 2 | NA | NA |
我有这段代码可以显示度假村 ID、度假村名称、经理姓名和他的 phone 号码以及显示 'NA' 经理姓名和 phone 号码的条件,如果它不可用。
select r.resortid, r.resortname, nvl(m.name, 'NA') as managername, nvl(m.phone, 'NA') as phoneno
from resort r inner join manager m
on r.managerid = m.managerid
order by r.resortid;
此代码的结果符合我的预期,但未显示 'NA' 行。是否使用了“NVL”关键字,错了吗?因为它是 Oracle SQL 我使用了那个关键字。请建议它是否有任何错误。提前致谢。
如果没有经理,就没有行。为什么?因为你加入了那些 table。应该有 OUTER 加入他们,即
from resort r left join manager m on ...
如 littlefoot 所述,您应该使用 LEFT JOIN 而不是 INNER JOIN.
LEFT JOIN关键字returns左边的所有记录table(resort),以及右边的匹配记录table (经理)。如果没有匹配,则结果从右侧开始为 NA。
Oracle 11g R2 架构设置:
create table resort
(
resortid char(5),
resortname varchar(25),
managerid char(5)
);
create table manager
(
managerid char(5),
name varchar(25),
phone char(7)
);
insert into resort values('r1', 'Resort 1', 'm1');
insert into resort values('r2', 'Resort 2', 'm2');
insert into manager values('m1', 'R.Manager One', '001-123');
查询 1:
select r.resortid, r.resortname, nvl(m.name, 'NA') as managername, nvl(m.phone, 'NA') as phoneno
from resort r left outer join manager m
on r.managerid = m.managerid
order by r.resortid
| RESORTID | RESORTNAME | MANAGERNAME | PHONENO |
|----------|------------|---------------|---------|
| r1 | Resort 1 | R.Manager One | 001-123 |
| r2 | Resort 2 | NA | NA |