本帖最后由 甲骨论-晨曦 于 2012-7-14 22:13 编辑
最近要写一段程序,大约的意思是,找到A列不等于B列的数据。用B列更新A列。
也就是A和B是对应的。 这个表也可能出现用C列更新D列。
为了减少REDO,需要将相同的值过滤掉,不做更新。这里涉及到空值的操作。
特此记录下。
drop table T7 cascade constraints;
create table T7
(
RN NUMBER,
C1 NUMBER,
C2 NUMBER,
C3 NUMBER,
C4 NUMBER
);
alter table T7 disable all triggers;
insert into T7 (RN, C1, C2, C3, C4)
values (1, 1, null, null, null);
insert into T7 (RN, C1, C2, C3, C4)
values (2, null, 22, null, null);
insert into T7 (RN, C1, C2, C3, C4)
values (3, null, null, 33, null);
insert into T7 (RN, C1, C2, C3, C4)
values (4, null, null, null, 44);
insert into T7 (RN, C1, C2, C3, C4)
values (5, 51, 52, 53, 54);
insert into T7 (RN, C1, C2, C3, C4)
values (0, null, null, null, null);
insert into T7 (RN, C1, C2, C3, C4)
values (6, 61, 61, null, null);
insert into T7 (RN, C1, C2, C3, C4)
values (7, 71, 72, null, null);
insert into T7 (RN, C1, C2, C3, C4)
values (8, null, null, 83, 83);
insert into T7 (RN, C1, C2, C3, C4)
values (9, null, null, 93, 94);
insert into T7 (RN, C1, C2, C3, C4)
values (10, 101, 101, 103, 103);
insert into T7 (RN, C1, C2, C3, C4)
values (11, 112, 112, 113, 114);
commit;
数据如下
SQL> select * from t7 order by rn ;
RN C1 C2 C3 C4
---------- ---------- ---------- ---------- ----------
0
1 1
2 22
3 33
4 44
5 51 52 53 54
6 61 61
7 71 72
8 83 83
9 93 94
10 101 101 103 103
RN C1 C2 C3 C4
---------- ---------- ---------- ---------- ----------
11 112 112 113 114
SQL> select * from t7 where c1 != 1 ;
RN C1 C2 C3 C4
---------- ---------- ---------- ---------- ----------
5 51 52 53 54
6 61 61
7 71 72
10 101 101 103 103
11 112 112 113 114
SQL> select * from t7 where c1 =1 ;
RN C1 C2 C3 C4
---------- ---------- ---------- ---------- ----------
1 1
看部分数据没有返回。
也就是说 数据库对于值的判断有三种 (使用is 除外)
1 等于 相等返回true
2 不等于 不等返回true
3 空 无论做什么比较都返回false
那么对于为空的列我们做“不等”比较呢?
“不等”的意思是空不等于非空。
SQL> select *
2 from t7
3 where c1 !=c2
4 or (c1 is null and c2 is not null )
5 or (c1 is not null and c2 is null ) ;
RN C1 C2 C3 C4
---------- ---------- ---------- ---------- ----------
1 1
2 22
5 51 52 53 54
7 71 72
本次返回了RN为1 和2 的数据。
再次总结下
数据库对于值的判断有三种
1 等于 相等返回true
2 不等于 不等返回true
3 空 无论做什么比较都返回false (使用is 除外)
附送空字歌
本来空,看不空,看不空,也是空;
求得来,还是空,放不下,仍是空;
妄杂念,更是空,到不如,就悟空;
万事空,我先空,悟了空,空不空
|
|