表A记录是每个车间领用的设备:电子号对应某个车间,号码段是设备编号
表B记录是每个车间领用的设备归还情况:电子号对应某个车间,号码段是设备编号,有可能只归还其中一部分
现在求每个车间的领用设备的归还情况现有两张表,表B的号码段一定在表A的对应号码段里,但是表A的记录在表B里不一定有,表A表B通过五个字段(电子号 规格 型号 起始号码 终止号码)关联
表A
电子号 规格 型号 起始号码 终止号码 领用日期
0001 11 1a9 000001 0000025 2011/01/01
0001 12 1a23 000001 0000025 2011/02/01
0002 12 a90 010010 0200035 2011/03/22
0003 3 390 034040 034065 2011/02/15
表B
电子号 规格 型号 起始号码 终止号码 归还时间
0001 11 1a9 000001 000009 2011/01/02
0001 11 1a9 000010 000024 2011/01/08
0001 11 1a9 000010 000025 2011/01/02
0001 12 1a23 000001 0000025 2011/2/04
0002 12 a90 010010 0200035 2011/3/25
求查询结果:
电子号 规格 型号 起始号码 终止号码 电子号 规格 型号 起始号码 终止号码 领用日期 归还时间
0001 11 1a9 000001 0000025 0001 11 a9 000001 000009 2011/01/01 2011/01/02
0001 11 1a9 000001 0000025 0001 11 a9 000010 000024 2011/01/01 2011/01/08
0001 11 1a9 000001 0000025 0001 11 a9 000010 000025 2011/01/01 2011/01/02
0001 12 1a23 000001 0000025 0001 12 1a23 000001 0000025 2011/02/01 2011/02/04
0002 12 a90 010010 0200035 0002 12 a90 010010 0200035 2011/03/22 2011/03/25
0003 3 390 034040 034065 null null null null null 2011/02/15 null
表B记录是每个车间领用的设备归还情况:电子号对应某个车间,号码段是设备编号,有可能只归还其中一部分
现在求每个车间的领用设备的归还情况现有两张表,表B的号码段一定在表A的对应号码段里,但是表A的记录在表B里不一定有,表A表B通过五个字段(电子号 规格 型号 起始号码 终止号码)关联
表A
电子号 规格 型号 起始号码 终止号码 领用日期
0001 11 1a9 000001 0000025 2011/01/01
0001 12 1a23 000001 0000025 2011/02/01
0002 12 a90 010010 0200035 2011/03/22
0003 3 390 034040 034065 2011/02/15
表B
电子号 规格 型号 起始号码 终止号码 归还时间
0001 11 1a9 000001 000009 2011/01/02
0001 11 1a9 000010 000024 2011/01/08
0001 11 1a9 000010 000025 2011/01/02
0001 12 1a23 000001 0000025 2011/2/04
0002 12 a90 010010 0200035 2011/3/25
求查询结果:
电子号 规格 型号 起始号码 终止号码 电子号 规格 型号 起始号码 终止号码 领用日期 归还时间
0001 11 1a9 000001 0000025 0001 11 a9 000001 000009 2011/01/01 2011/01/02
0001 11 1a9 000001 0000025 0001 11 a9 000010 000024 2011/01/01 2011/01/08
0001 11 1a9 000001 0000025 0001 11 a9 000010 000025 2011/01/01 2011/01/02
0001 12 1a23 000001 0000025 0001 12 1a23 000001 0000025 2011/02/01 2011/02/04
0002 12 a90 010010 0200035 0002 12 a90 010010 0200035 2011/03/22 2011/03/25
0003 3 390 034040 034065 null null null null null 2011/02/15 null
解决方案 »
- 关于Oracle时间类型的,求救
- varchar2 读入后带空格
- oracle异常范围
- 请教一个关于Oracle数据抽取的问题
- Oracle中如何查询一个用户下有多少张表、视图等等?
- 请教如何去除此数据
- 晕了,菜鸟新装数据库,一周没有搞定,求助
- 一个很菜的问题
- 是不是选取某几个字段时,必须用select ...into ...,存储过程才有效?
- 创建用户的角色、系统权限、对象权限、使用者组、限额怎么设置???请帮忙!!在线等!!!!
- ORA-01693: max # extents (4096) 已在 lob 段KM3KS.SYS_LOB0000024855C00003$$中达到
- 关于GoldenGate配置
--难道下面的结果不是你给出的结果?
--反正没明白你说的号码段处理该怎么处理
--你看着办自己修改
with a as(
select '0001' 电子号,'11' 规格, '1a9' 型号, '000001' 起始号码, '0000025' 终止号码,'2011/01/01' 领用日期 from dual
union all
select '0001', '12', '1a23', '000001', '0000025','2011/02/01' from dual
union all
select '0002', '12', 'a90', '010010', '0200035','2011/03/22' from dual
union all
select '0003', '3', '390', '034040', '034065','2011/02/15' from dual
)
,
b as(
select '0001' 电子号,'11' 规格, '1a9' 型号, '000001' 起始号码, '000009' 终止号码,'2011/01/02' 归还时间 from dual
union all
select '0001', '11', '1a9', '000010', '000024','2011/01/08' from dual
union all
select '0001', '11', '1a9', '000010', '000025','2011/01/02' from dual
union all
select '0001', '12', '1a23', '000001', '000025','2011/2/04' from dual
union all
select '0002', '12', 'a90', '010010', '0200035','2011/3/25' from dual
) select a.电子号,a.规格,a.型号,a.起始号码,a.终止号码,
b.电子号,b.规格,b.型号,b.起始号码,b.终止号码,
a.领用日期,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 2011/01/01 2011/01/02
0001 11 1a9 000001 0000025 0001 11 1a9 000010 000024 2011/01/01 2011/01/08
0001 11 1a9 000001 0000025 0001 11 1a9 000010 000025 2011/01/01 2011/01/02
0001 12 1a23 000001 0000025 0001 12 1a23 000001 000025 2011/02/01 2011/2/04
0002 12 a90 010010 0200035 0002 12 a90 010010 0200035 2011/03/22 2011/3/25
0003 3 390 034040 034065 2011/02/15
a.电子号=b.电子号(+)
and a.规格=b.规格(+)
and a.型号=b.型号(+)
and a.领用时间 <= b.归还时间
and (a.起始号码<=b.起始号码 and a.终止号码>=b.终止号码)
表A
电子号 规格 型号 起始号码 终止号码 领用日期
0001 11 1a9 000001 0000025 2011/01/01
0001 11 1a9 000026 0000050 2011/01/18
0001 12 1a23 000001 0000025 2011/02/01
0002 12 a90 010010 0200035 2011/03/22
0003 3 390 034040 034065 2011/02/15
表B
电子号 规格 型号 起始号码 终止号码 归还时间
0001 11 1a9 000001 000009 2011/01/02
0001 11 1a9 000010 000024 2011/01/08
0001 11 1a9 000010 000025 2011/01/02
0001 11 1a9 000026 0000028 2011/01/20
0001 11 1a9 000029 0000050 2011/01/24
0001 12 1a23 000001 0000025 2011/2/04
0002 12 a90 010010 0200035 2011/3/25
--这下晓得你说的了,老火的很,你就直接说B表的表号有可能不在A的表号段就OK了嘛
--改下就好了嘛
select a.电子号,a.规格,a.型号,a.起始号码,a.终止号码,
b.电子号,b.规格,b.型号,b.起始号码,b.终止号码,
a.领用日期,b.归还时间
from a,b
where a.电子号=b.电子号(+) and a.规格=b.规格(+) and a.型号=b.型号(+)
and (Nvl(b.起始号码,a.起始号码)+0 between a.起始号码+0 and a.终止号码+0)
and (Nvl(b.终止号码,a.终止号码)+0 between a.起始号码+0 and a.终止号码+0)
order by 1
b.电子号,b.规格,b.型号,b.起始号码,b.终止号码,
a.领用日期,b.归还时间
from a,b
where a.电子号=b.电子号(+) and a.规格=b.规格(+) and a.型号=b.型号(+)
and (Nvl(b.起始号码,a.起始号码)+0 between a.起始号码+0 and a.终止号码+0)
and (Nvl(b.终止号码,a.终止号码)+0 between a.起始号码+0 and a.终止号码+0)
order by 1
select '330200000000129286' dzh,'28355' gg, '133021013533' xh, '01034076' qshm, '01034100' zzhm from dual
union all
select '330200000000129286', '28355', '133021013533', '03816676', '03816700' from dual
union all
select '330200000000129286', '28355', '133021013533', '03927426', '03927450' from dual
)
,
b as(
select '330200000000129286' dzh,'28355' gg, '133021013533' xh, '01034076' qshm, '01034100' zzhm from dual
union all
select '330200000000129286', '28355', '133021013533', '03816676', '03816700' from dual
)
select a.dzh,a.gg,a.xh,a.qshm,a.zzhm,
b.dzh,b.gg,b.xh,b.qshm,b.zzhm
from a,b
where a.dzh=b.dzh(+) and a.gg=b.gg(+) and a.xh=b.xh(+)
and (Nvl(b.qshm,a.qshm)+0 between a.qshm+0 and a.zzhm+0)
and (Nvl(b.zzhm,a.zzhm)+0 between a.qshm+0 and a.zzhm+0)
order by 1
结果就只有两条数据
电子号 规格 型号 起始号码 终止号码 电子号 规格 型号 起始号码 终止号码
330200000000129286 28355 133021013533 01034076 01034100 330200000000129286 28355 133021013533 01034076 01034100
330200000000129286 28355 133021013533 03816676 03816700 330200000000129286 28355 133021013533 03816676 03816700
我希望有三条数据
电子号 规格 型号 起始号码 终止号码 电子号 规格 型号 起始号码 终止号码
330200000000129286 28355 133021013533 01034076 01034100 330200000000129286 28355 133021013533 01034076 01034100
330200000000129286 28355 133021013533 03816676 03816700 330200000000129286 28355 133021013533 03816676 03816700
330200000000129286 28355 133021013533 03927426 03927450
from a left join b
on a.电子号=b.电子号 and a.规格=b.规格 and a.型号=b.型号
and a.起始号码<=b.起始号码 and a.终止号码>=b.终止号码or select *
from a full join b
on a.电子号=b.电子号 and a.规格=b.规格 and a.型号=b.型号
and a.起始号码<=b.起始号码 and a.终止号码>=b.终止号码