表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导入备份问题
- 我装的是9i,开机时总是报日志文件错误,说什么至少一个或一个以上服务错误什么的,我查看了事件管理器和服务,是以下的两个没起来
- ----NVL的使用问题------
- 请问如何将一个备份的数据库加到oracle上?急!!!
- 急啊:oracle不能啓動
- not exists函数问题!!!!!!!!!!!!!!!
- PL/SQL简单问题
- 请问各位一下:怎么调试带 OUT 参数的存储过程?
- 一个DELPHI的控件ODAC开发ORACLE应用程序的问题,高分求援,马上给分!!!
- 一个关于日期的问题
- 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.终止号码