select NVL(B.SEQID, A.LVL5_ID) LVL6_ID, NVL(B.NAME, ' ') LVL6_NAME, A.LVL5_ID
FROM LVL5 A, ABC B WHERE A.LVL5_ID = B.LVL7上面的查询在我的系统中定义了一个视图。在这里,我想知道为什么使用NVL。
问题是SEQID是一个主键列,不能为空。那么这里有NVL的需求吗?
如果找不到满足where子句的记录,B.SEQID会为空吗?(我知道这不合理,但我不得不问一下)
发布于 2012-04-20 15:35:01
您的nvl函数所做的是用A.LVL5_ID的值替换它在B.SEQID中遇到的所有null值。
声明B.SEQID是主键会使这个NVL在查询中变得无用,因为主键永远不能包含空值。但是,唯一键肯定可以包含多个空值。
如果where子句没有任何匹配,它将不会返回NULL值,而是返回一个“没有选择行”,这是一个反馈消息。
发布于 2012-04-20 15:33:46
主键约束是唯一键约束加上非空值约束。所以它确保了它下面的列是强制的。因此,您可以愉快地删除NVL。
致以敬意,
罗伯。
https://stackoverflow.com/questions/10241940
复制相似问题