在Oracle数据库里有一张表student,它的no字段存放1到64中任意若干数字,现在要写sql语句来实现1到64个数字中未被student表no字段占用的数字。请高手帮我看看,急用!
如:假设student有如下记录:
id no name
---- ----- ------
1 5 Bob
2 18 Jane
3 56 Sam
4 34 Jessi用sql语句返回的结果应该为1到64中除去5、18、56、34的所有数字
如:假设student有如下记录:
id no name
---- ----- ------
1 5 Bob
2 18 Jane
3 56 Sam
4 34 Jessi用sql语句返回的结果应该为1到64中除去5、18、56、34的所有数字
然后两表内连接,取不在student表中的no。
select * from
(select rownum rn from dual connect by rownum<65) r
where not exists
(select 1
from students t
where r.rn=t.no)
order by rn;
--------------- 测试数据
CREATE TABLE student
(
ID NUMBER,
NO NUMBER,
BOB VARCHAR2(10)
);
INSERT INTO STUDENT VALUES (1 , 5 , 'Bob' );
INSERT INTO STUDENT VALUES (2 , 18 , 'Jane');
INSERT INTO STUDENT VALUES (3 , 56 , 'Sam' );
INSERT INTO STUDENT VALUES (4 , 34 , 'Jessi');
COMMIT;--------------- SQL
SELECT R.RN
FROM (SELECT ROWNUM AS RN
FROM ALL_OBJECTS T
WHERE ROWNUM <= 64) R --- 1到64个数字
WHERE NOT EXISTS (SELECT NO
FROM STUDENT S
WHERE S.NO = R.RN)
ORDER BY R.RN
------------- 结果
RN
1
2
3
4
6
7
8
9
10
11
12
13
14
15
16
17
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
57
58
59
60
61
62
63
64