本帖最后由 spy7 于 2011-06-30 08:55:58 编辑

解决方案 »

  1.   


    --外连接
    select a.电子号,a.规格,a.型号,a.起始号码,a.终止号码,
           b.电子号,b.规格,b.型号,b.起始号码,b.终止号码
    from  a,b
    where a.电子号=b.电子号(+)
      

  2.   

    select a.电子号,a.规格,a.型号,a.起始号码,a.终止号码,
           b.电子号,b.规格,b.型号,b.起始号码,b.终止号码
    from a 
    join b
      on a.电子号   = b.电子号
     and a.规格     = b.规格
     and a.起始号码 = b.起始号码
     and to_number(b.起始号码) >= to_number(a.起始号码)
     and to_number(b.终止号码) <= to_number(a.终止号码)
      

  3.   

    你说 电子号 规格 型号 三个字段相同后表B的号码段要在表A的号码段当中。
     那我请问你 0001电子号 A表和B表的型号不同,一个是la9 一个是a9,为什么放在一起了呢
    如果是按你这样说的,连接条件多加两个就可以啊
    where a.电子号=b.电子号(+) and a.规格=b.规格(+) and b.型号=a.型号(+)
      

  4.   

    还有就是表B的号码段要落在表A的号码段当中,如果表B没数据,应该有NULL数据
      

  5.   


    with a as(
    select '0001' 电子号,'11' 规格, '1a9' 型号, '000001' 起始号码, '0000025' 终止号码 from dual
    union all
    select '0001', '12', '1a23', '000001', '0000025' from dual
    union all
    select '0002', '12', 'a90', '010010', '0200035' from dual
    union all
    select '0003', '3', '390', '034040', '034065' from dual
    ),
    b as(
    select '0001' 电子号,'11' 规格, '1a9' 型号, '000001' 起始号码, '000009' 终止号码 from dual
    union all
    select '0001', '11', '1a9', '000010', '000024' from dual
    union all
    select '0001', '11', '1a9', '000010', '000025' from dual
    union all
    select '0002', '12', 'a90', '010010', '0200035' from dual

    select a.电子号,a.规格,a.型号,a.起始号码,a.终止号码,
           b.电子号,b.规格,b.型号,b.起始号码,b.终止号码
    from  a,b
    where a.电子号=b.电子号(+)  and a.规格=b.规格(+) and a.型号=b.型号(+)
    order by 1电子号 规格 型号 起始号码 终止号码 电子号 规格 型号 起始号码 终止号码
    0001 11 1a9  000001 0000025 0001 11 1a9 000001 000009 
    0001 11 1a9  000001 0000025 0001 11 1a9 000010 000024 
    0001 11 1a9  000001 0000025 0001 11 1a9 000010 000025 
    0001 12 1a23 000001 0000025                           
    0002 12 a90  010010 0200035 0002 12 a90 010010 0200035
    0003 3  390  034040 034065                            --请问上面结果倒数第三天你的需求为什么给过滤掉?
    --麻烦你把你的需求先说明白了,再来提问好不好?
    --就只给一个结果,屁业务逻辑描述都没的,让我们去猜你的需求啊?
    --这条记录也符合你说的,如果表B没数据,应该有NULL数据
    --简直浪费时间,走了~~
      

  6.   

    先谢谢您耐心解答
    --您建立的表B里面只有四条数据,所以倒数第三条有问题。
    --第二,没把业务需求描述清楚确实是个问题。其实这个问题是这样的:
    表A记录是每个车间领用的设备:电子号对应某个车间,号码段是设备编号
    表B记录是每个车间领用的设备归还情况:电子号对应某个车间,号码段是设备编号
    现在求设备的明细状态