1

我正在甲骨文做我的功课。

我必须创建一个复杂的视图,在创建视图之后,我必须对其进行修改。

问题是视图的创建必须能够处理不department_name存在的情况。我不确定我是否必须使用这个NVL(d.department_name, 'No department established yet')

第二个问题是我必须修改视图以将列名更改为别名,例如将部门名称更改为“部门”,并在视图中包含视图中未包含的其他国家/地区。以下是我创建的视图,我需要帮助。

CREATE VIEW jack_vu AS
SELECT NVL(d.department_name, 'No department established yet') "department_name"
     , l.city
     , l.state_province
  FROM locations l 
  JOIN departments d
    ON (l.location_id = d.location_id)
 WHERE UPPER(l.country_id) LIKE 'CA'
    OR UPPER(l.country_id) LIKE 'IT';
4

2 回答 2

2

看起来你在正确的轨道上。NVL 函数用于处理空值,所以这似乎没问题。您已经在使用别名“department_name”。您还可以对普通列使用别名,即:从表中选择 column_name 作为“别名”;

您还可以使用“创建或替换视图...”来更改已经存在的视图。

于 2012-08-09T06:36:41.970 回答
1

NVL() 是正确的做法,但你永远不会得到 deparment_name 的空值(除非它存储在部门表中),因为你的查询使用的是“INNER JOIN”

您想要的是在位置和部门之间使用外部联接,其中将包括结果中尚未(尚未)分配给部门的位置。

顺便说一句,不需要 LIKE 运算符。当您进行平等检查时。为了使添加国家更容易,使用IN运算符将​​减少输入(尽管它OR会工作得很好)

SELECT ...
FROM locations l 
  LEFT JOIN departments d ON (l.location_id = d.location_id) -- the LEFT is the difference
WHERE UPPER(l.country_id) IN  ('CA','IT'); -- add more countries here.

如果你不明白这里发生了什么,你可能想阅读外连接(例如这里:http ://www.devx.com/dbzone/Article/17403/1954?pf=true )

您已经知道如何通过为 NVL 函数的结果提供别名“department_name”来为已经使用过的列赋予新名称。因此,如果应将其命名为“部门”,则只需更改名称即可。我个人更喜欢使用AS来引入列别名。我认为它使意图更加清晰。

SELECT NVL(d.department_name, 'No department established yet') as "Departments" 
于 2012-08-09T06:55:14.340 回答