我想知道内部和外部查询是如何工作的?
请在下面解释我的问题
update jobgrade set HIGHSAL=6000
where GRADE in(select grade from JOBGRADE where grade='B');
答案 0 :(得分:0)
该查询说更新jobgrade
表并将HIGHSAL
列的值设置为6000,其中GRADE
列的值位于IN
列的结果集中{1}}查询。
由于IN
查询正在查找jobgrade
grade='B'
中的所有行,因此它将返回大量值为B
的行。这样做没有任何意义。
你应该这样做:
UPDATE jobgrade
SET HIGHSAL=6000
WHERE grade='B'
因为它完全是一样的。
我想我得到了你真正要求的东西。
IN
运算符的查询不会受update语句的影响。因此,如果您要更新在该查询中筛选的字段,则结果将基于表在更新语句之前的方式。
我找不到任何支持我理论的内容,但我不相信IN
运算符的查询执行多次,而WHERE
子句会在UPDATE
之前执行}}子句按操作顺序排列。
答案 1 :(得分:0)
在逻辑层面上,您必须分两步分配内部和外部查询。
内部查询的结果 - 在您的情况下是select grade from JOBGRADE where grade='B'
部分 - 将在外部查询中appointed
where GRADE in part
。请注意,有更多选项可以实现内部/外部架构......或(等效的)主查询/子查询架构。特别是在外部查询中使用in
语句很重要。您可以使用=
子句,但内部查询(〜子查询)必须正好产生1行;不多也不少。否则
ORA-00913: too many values
将被抛出。
使用in
语句允许内部查询产生0值,1值或更多1值。最后,where GRADE in
将与从内部查询中检索的值匹配。