某表:t_servicename
字段:f1,f2,……,fn(n为确定正整数)
查询要求:f1,f2字段类型均为varchar2,现需求查询这张表的某些数据使得这些记录中任意两条记录的f2字段的内容相同且f1字段的内容相同且f1字段的前两位为‘00’

解决方案 »

  1.   

    SELECT A.*
    FROM   t_servicename A
    INNER  JOIN t_servicename B ON A.F2 = B.F2 AND A.F1 = B.F1
    WHERE  A.F1 LIKE '00%'
    /
      

  2.   

    上面的方案不对.即使相同的表关联,但是,查询条件中并没有B 表的信息,这和直接从A表中查是没有区别的.SQL> select *  from  test;F1         F2
    ---------- ----------
    001        002
    234        002
    002        002
    002        004
    004        008
    001        0026 rows selectedSQL> 
    SQL> SELECT A.*
      2  FROM test A
      3  INNER JOIN test B ON A.F2 = B.F2 AND A.F1 = B.F1
      4  WHERE A.F1 LIKE '00%'
      5  ;F1         F2
    ---------- ----------
    001        002
    001        002
    001        002
    001        002
    002        002
    002        004
    004        0087 rows selected
    搂主的条件有两个,一是f1满足 like '00%, 二是任意两行满足f1,f2分别相等,其实将条件2归纳一下,就是所有结果集中,f1,f2字段相同.
    那么可以用下面的方案得到结果.
     
    SQL> select * from  test where (f1,f2)  in ( select f1 ,f2 from test where f1 like '00%' and rownum<2);F1         F2
    ---------- ----------
    001        002
    001        002SQL>