我在SQL方面有一些经验,并且遇到了以下SQLPlus / Oracle代码。我对你为何使用这段代码进行更新感到有些困惑。 表示例是table1,其列为col1,col2,col3
update e
set grade='HD'
where stu_no=(
select stu_no
from e
where result >80 and grade !='HD')
and unit_code=(
select unit_code
from e
where result >80 and and grade !='HD' ) ;
为什么它不能像以下那样更新,
update e
set grade = 'HD'
where result >= 80
and grade != 'HD'
提前感谢您的帮助!
编辑:添加实际代码而不更改表名
答案 0 :(得分:0)
鉴于条件子查询(select stu_no from e where result > 80 and grade !='HD'
)必须只返回一个结果,否则查询将返回错误,那么它确实可以在没有子查询的情况下完成。
可能是这样的:只有在有一条符合条件的记录时才会更新。但这对于如此简单的检查来说是相当大的开销。
请注意制作本文的背景。计算机科学中的一些东西可能非常棘手。
答案 1 :(得分:0)
如果我理解你的问题,你想更新IFF另一条记录exists
,使用相同的{col1,col2}和(col2&gt; 0 AND col3&lt;&gt;'XYZ'):< / p>
UPDATE table1 t1
SET col3 = 'XYZ'
WHERE EXISTS (
SELECT *
from table1 ex
WHERE ex.col1 = t1.col1 AND ex.col2 = t1.col2
AND col2 > 0 and col3 <> 'XYZ'
)
;