问题二
问题1已经得到了可能存在的评分者之间关系,表二中保存了打分情况,如何得到还没有打分的情况呢?
如表二中100(张三)对100(张三)打了分,100对101,100对102,101对100打了分,那么返回没打分的情况应该如下:
101 李四 101 李四
101 李四 102 王二
102 王二 100 张三
102 王二 101 李四
102 王二 102 王二
(它应该是表2中记录对于问题1的补集,怎么写SQL语句呢)?
问题1已经得到了可能存在的评分者之间关系,表二中保存了打分情况,如何得到还没有打分的情况呢?
如表二中100(张三)对100(张三)打了分,100对101,100对102,101对100打了分,那么返回没打分的情况应该如下:
101 李四 101 李四
101 李四 102 王二
102 王二 100 张三
102 王二 101 李四
102 王二 102 王二
(它应该是表2中记录对于问题1的补集,怎么写SQL语句呢)?
select a.员工ID,a.员工姓名,b.员工ID,b.员工姓名
from tb a,tb b order by a.员工ID;
2 from tb1 a,tb1 b order by a.员工ID; 员工ID 员工姓名 员工ID 员工姓名
--------- -------------------- --------- -----------
100 张三 100 张三
100 张三 101 李四
100 张三 102 王二
101 李四 100 张三
101 李四 102 王二
101 李四 101 李四
102 王二 100 张三
102 王二 102 王二
102 王二 101 李四已选择9行。SQL>
SQL> select * from (
2 select a.员工ID 评分者ID,a.员工姓名 评分者员工姓名,
3 b.员工ID 被评分者ID,b.员工姓名 被评分者员工姓名
4 from tb1 a,tb1 b
5 ) t
6 where not exists(select 1 from tb2
7 where tb2.评分者ID=t.评分者ID and tb2.被评分者ID=t.被评分者ID); 评分者ID 评分者员工姓名 被评分者ID 被评分者员工姓名
--------- -------------------- ---------- --------------------
102 王二 100 张三
101 李四 101 李四
102 王二 101 李四
101 李四 102 王二
102 王二 102 王二SQL>
2 select a.员工ID 评分者ID,a.员工姓名 评分者员工姓名,
3 b.员工ID 被评分者ID,b.员工姓名 被评分者员工姓名
4 from tb1 a,tb1 b
5 ) t
6 where not exists(select 1 from tb2
7 where tb2.评分者ID=t.评分者ID and tb2.被评分者ID=t.被评分者ID) order by t.评分者ID; 评分者ID 评分者员工姓名 被评分者ID 被评分者员工姓名
--------- -------------------- ---------- --------------------
101 李四 101 李四
101 李四 102 王二
102 王二 100 张三
102 王二 102 王二
102 王二 101 李四SQL>
可以用in子句来实现吗,可以的化该怎么写呢?
如果要用MINUS通过两个结果集求差实现,又该怎么写呢?
select a.员工ID 评分者ID,a.员工姓名 评分者员工姓名,
b.员工ID 被评分者ID,b.员工姓名 被评分者员工姓名
from tb1 a,tb1 b
) t
where (t.评分者ID,t.被评分者ID )not in (select tb2.评分者ID,tb2.被评分者ID from tb2
) order by t.评分者ID;
b.员工ID 被评分者ID,b.员工姓名 被评分者员工姓名
from tb1 a,tb1 b
minus
select tb2.评分者ID,tb2.被评分者ID from tb2 ;