select
    ... 
from 
    table1 A,table2 B 
where
    decode(B.id,A.id1,A.name1,A.id2,A.name2,A.id3,A.name3,...)=B.name

解决方案 »

  1.   

    谢谢,如果有三个字段需要判断呢? 
    如:
    A.name1=B.name and A.id1=B.name1 and A.add1=B.add
      

  2.   

    select
        ... 
    from 
        table1 A,table2 B 
    where
        decode(B.id,A.id1,decode(B.name,A.name1,A.add1),
                    A.id2,decode(B.name,A.name2,A.add2),
                    A.id3,decode(B.name,A.name3,A.add3),
                    ...)=B.add
      

  3.   

    刚才测试了一下,速度非常慢,有没有更好的方法.是不是用sql语句不能很好的完成?
    因为字段名类似(如name1,name2....),能不能直接进行判断!!
    谢谢
      

  4.   

    用DECODE函数处理过之后的表达式是一个计算列,这个计算列导致查询过程中无法引用到原列上的索引,查询效率自然不会高。
      

  5.   

    我不是单问一条sql语句怎么写,而是想找出解决问题的方法
    请帮帮忙了!
      

  6.   

    SELECT ..... FROM table1 A,table2 B
    WHERE A.name1=B.NAME AND A.id1=B.name1 AND A.add1=B.ADD
    UNION ALL
    SELECT ..... FROM table1 A,table2 B
    WHERE A.name2=B.NAME AND A.id2=B.name1 AND A.add2=B.ADD
    UNION ALL
    SELECT ..... FROM table1 A,table2 B
    WHERE A.name3=B.NAME AND A.id3=B.name1 AND A.add3=B.ADD
      

  7.   

    因为数据结构设计的问题,可能效率很难提高.虽然问题没有解决还是谢谢大家.请问有没有spread的学习资料地址,中文的?
      

  8.   

    http://www.cnoug.org
    这里有不少优化的文档,可以看看
      

  9.   

    ORACLE技术中国用户讨论组 » Oracle调优与深入