表结构和数据如下:A表:empno  number, positionno number   一对一
数据如:
      1              1
      2              2
      3              3
      4              1
      5              2
      6              4
B表:positionno number, rightno number  一对多
数据如:
   1          1
   1          2
   1          3
   1          4
   1          5   2          1
   2          2   3          1
   3          2
  
   4          1
   4          2
   4          3
   4          4
   
C表:rightno  number  rightname  varchar2  type  number    一对一
     1                name1                0
     2                name2                 0
     3                name3                 1
     4                name4                 1
     5                name5                 1现需要查询type值只能等于0的empno,注意这里的2和3是可配置的(动态的),即对应1和2的编号可能是1和4或其他数字
但不管怎样,他们所对应的1和2是固定的。   现需要查询type值只能等于0的empno, 希望各位高手们帮忙解决!

解决方案 »

  1.   

    注意这里的2和3是可配置的(动态的),即对应1和2(指rightno)的编号可能是1和4(指positionno )或其他数字。但不管怎样,他们所对应的1和2(指rightno)是固定的。 
      

  2.   

    为何我看不懂上面写的描述?“注意这里的2和3是可配置的(动态的),即对应1和2(指rightno)的编号可能是1和4(指positionno )或其他数字。但不管怎样,他们所对应的1和2(指rightno)是固定的。”这个2和3指的是什么?是哪个表,是哪个字段?“对应1和2(指rightno)的编号可能是1和4(指positionno )或其他数字。”这句看明白了,是指rightno为1和2的记录,它们的positionno可以1,2,3,4,说的是B表吧最后一句
    “但不管怎样,他们所对应的1和2(指rightno)是固定的”
    又看不懂了
      

  3.   


    呵呵!都怪我没讲清楚
    2和3是B表的positionno字段
    1和2是指B表或C表的rightno字段
      

  4.   

    select empno from a
    where not exists(
      select 1 from b,c
      where b.rightno=c.rightno
        and a.positionno=b.posistionno
        and c.type<>0)
      

  5.   

    SELECT DISTINCT (EMPNO)
      FROM A A,
           (SELECT DISTINCT(B.POSITIONNO) AS POSITIONNO
              FROM B B, C C
             WHERE C.RIGHTNO = B.RIGHTNO
               AND C.TYPE = '0') D
     WHERE A.POSITIONNO = D.POSITIONNO