问题二
问题1已经得到了可能存在的评分者之间关系,表二中保存了打分情况,如何得到还没有打分的情况呢?
如表二中100(张三)对100(张三)打了分,100对101,100对102,101对100打了分,那么返回没打分的情况应该如下:
101        李四         101      李四
101        李四         102      王二
102        王二         100      张三
102        王二         101      李四
102        王二         102      王二
(它应该是表2中记录对于问题1的补集,怎么写SQL语句呢)?

解决方案 »

  1.   

    问题1:
    select a.员工ID,a.员工姓名,b.员工ID,b.员工姓名
    from tb a,tb b order by a.员工ID;
      

  2.   

    SQL> select a.员工ID,a.员工姓名,b.员工ID,b.员工姓名
      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>
      

  3.   

    问题二:
    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>
      

  4.   

    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) order by t.评分者ID; 评分者ID 评分者员工姓名       被评分者ID 被评分者员工姓名
    --------- -------------------- ---------- --------------------
          101 李四                        101 李四
          101 李四                        102 王二
          102 王二                        100 张三
          102 王二                        102 王二
          102 王二                        101 李四SQL>
      

  5.   

    谢谢 bzszpSongZip,
    可以用in子句来实现吗,可以的化该怎么写呢?
    如果要用MINUS通过两个结果集求差实现,又该怎么写呢?
      

  6.   

    select * from (
      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;
      

  7.   

    select a.员工ID 评分者ID,a.员工姓名 评分者员工姓名,
      b.员工ID 被评分者ID,b.员工姓名 被评分者员工姓名
      from tb1 a,tb1 b
    minus
    select tb2.评分者ID,tb2.被评分者ID from tb2 ;
      

  8.   

    谢谢  bzszp(SongZip),非常感谢。