两个表,号码段查询问题

spy7 2011-06-30 08:45:44
现有两张表,表B的号码段一定在表A的对应号码段里,但是表A的记录在表B里不一定有,表A表B通过五个字段(电子号 规格 型号 起始号码 终止号码
)关联
表A
电子号 规格 型号 起始号码 终止号码
0001 11 1a9 000001 0000025
0001 12 1a23 000001 0000025
0002 12 a90 010010 0200035
0003 3 390 034040 034065

表B
电子号 规格 型号 起始号码 终止号码
0001 11 a9 000001 000009
0001 11 a9 000010 000024
0001 11 a9 000010 000025
0001 12 1a23 000001 0000025
0002 12 a90 010010 0200035
求查询结果:
电子号 规格 型号 起始号码 终止号码 电子号 规格 型号 起始号码 终止号码
0001 11 1a9 000001 0000025 0001 11 a9 000001 000009
0001 11 1a9 000001 0000025 0001 11 a9 000010 000024
0001 11 1a9 000001 0000025 0001 11 a9 000010 000025
0001 12 1a23 000001 0000025 0001 12 1a23 000001 0000025
0002 12 a90 010010 0200035 0002 12 a90 010010 0200035
0003 3 390 034040 034065 null null null null null
...全文
128 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
spy7 2011-06-30
  • 打赏
  • 举报
回复
您没有对号码段进行处理肯定是有问题的
spy7 2011-06-30
  • 打赏
  • 举报
回复
先谢谢您耐心解答
--您建立的表B里面只有四条数据,所以倒数第三条有问题。
--第二,没把业务需求描述清楚确实是个问题。

其实这个问题是这样的:
表A记录是每个车间领用的设备:电子号对应某个车间,号码段是设备编号
表B记录是每个车间领用的设备归还情况:电子号对应某个车间,号码段是设备编号
现在求设备的明细状态
gelyon 2011-06-30
  • 打赏
  • 举报
回复

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数据
--简直浪费时间,走了~~
spy7 2011-06-30
  • 打赏
  • 举报
回复
还有就是表B的号码段要落在表A的号码段当中,如果表B没数据,应该有NULL数据
spy7 2011-06-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gelyon 的回复:]
你说 电子号 规格 型号 三个字段相同后表B的号码段要在表A的号码段当中。
那我请问你 0001电子号 A表和B表的型号不同,一个是la9 一个是a9,为什么放在一起了呢
如果是按你这样说的,连接条件多加两个就可以啊
where a.电子号=b.电子号(+) and a.规格=b.规格(+) and b.型号=a.型号(+)
[/Quote]


对不起是我打错了,漏了1,应该都是1a9
gelyon 2011-06-30
  • 打赏
  • 举报
回复
你说 电子号 规格 型号 三个字段相同后表B的号码段要在表A的号码段当中。
那我请问你 0001电子号 A表和B表的型号不同,一个是la9 一个是a9,为什么放在一起了呢
如果是按你这样说的,连接条件多加两个就可以啊
where a.电子号=b.电子号(+) and a.规格=b.规格(+) and b.型号=a.型号(+)
geniusqiao 2011-06-30
  • 打赏
  • 举报
回复
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.终止号码)
spy7 2011-06-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gelyon 的回复:]
SQL code


--外连接
select a.电子号,a.规格,a.型号,a.起始号码,a.终止号码,
b.电子号,b.规格,b.型号,b.起始号码,b.终止号码
from a,b
where a.电子号=b.电子号(+)
[/Quote]
这个显然不行,表之间关联是通过 ( 电子号 规格 型号 起始号码 终止号码 )这几个字段,
电子号 规格 型号 三个字段相同后表B的号码段要在表A的号码段当中。
gelyon 2011-06-30
  • 打赏
  • 举报
回复

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

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧