日期:2014-05-17  浏览次数:20685 次

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

------解决方案--------------------
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% '
/
------解决方案--------------------
上面的方案不对.即使相同的表关联,但是,查询条件中并没有B 表的信息,这和直接从A表中查是没有区别的.

SQL> select * from test;

F1 F2
---------- ----------
001 002
234 002
002 002
002 004
004 008
001 002

6 rows selected

SQL>
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 008

7 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 002

SQL>