【发布时间】:2019-06-06 03:27:07
【问题描述】:
提供了一张员工表 table1,我必须创建一个视图,列出担任管理职位的员工。没问题。 然后从这个角度必须列出属于部门 10 的人。没问题。 但是,仍然是同样的观点,我被要求插入一个属于 20 部门的新推销员。 执行此操作时,新创建的行不会出现在视图中,但会出现在原始 table1 中。我不懂为什么。这是我的代码:
-- I create the view here
create view v_senior
as
select *
from emp
where job like 'manager' or job like 'president';
--Here I filter by department 10
select *
from v_senior
where deptno = 10;
-- Here I try to add the new Salesman
insert into v_senior (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values(8888,'Luxian', 'SALESMAN', '5678', '2019-06-06', '100000', '500', 20)
这就是当我尝试从 v_senior 获取所有数据时,返回的唯一数据是处于管理职位的员工,没有我新添加的销售员的迹象。但是当我从 emp (原始表)中获取所有数据时,这个推销员确实出现了。请任何人为我解释一下,我感到迷茫,不知道出了什么问题。 非常感谢。
【问题讨论】:
-
您的视图有一个 WHERE 条件来限制基于“经理”或“总裁”的数据,但您正在插入一个“推销员”工作,因此它不会成为视图的一部分。它按预期工作。为什么你认为它应该是其他的?
-
如果您的查询只是在寻找“经理”或“总裁”的工作,为什么您希望看到没有该值的行?
-
我认为 WHERE 语句只会追溯,但它确实会影响任何新添加的行?我将它直接添加到视图中,而不是添加到表格中,但它出现在表格中。无论如何,谢谢你的回答。
-
@OldProgrammer 感谢您的回答,但我只是按照作业表上的步骤进行操作。以下是列出的步骤 1.2 使用在 1.1 中创建的视图来: 1.2.1 列出部门 10 中的所有高级员工。 1.2.2 将新销售员插入部门 20。 1.2.3 列出所有高级员工。
-
“我认为 WHERE 语句只能追溯”——不。视图或多或少是一个存储查询,每次查询视图时都会重新执行。 “但它会影响任何新添加的行吗?”是的。