orcale多表查询(分页)

hyxd2 2010-01-25 09:18:30
现在有三个表:
单位信息表A(单位内码,单位外码,单位名称);
项目信息表B(项目内码,项目外码,项目名称);
项目挂接信息表C(单位内码,项目内码)。

现在用户只能从页面通过单位外码或者单位名称经行模糊查询出项目挂接信息,要求以每页显示10条单位外码、名称、项目外码、名称等信息。

我现在的方法就是通过用户输入的信息模糊查询出所有单位,然后循环查出和单位有挂接的所有项目内码,然后再循环查出项目的相关信息。

虽然结果是出来了,但是这样的速度非常慢。本人对ORCALE的操作也是涉入不是很多,所以在这里请求帮助,怎么来优化一下,谢谢!(差点忘记了,不能用存储过程,需求单位不让。)
...全文
923 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyxd2 2010-01-25
  • 打赏
  • 举报
回复
呵呵,原来除开分页,ORACLE和MSSQL的语句一致的。
阿_布 2010-01-25
  • 打赏
  • 举报
回复
sql语句可以用动态拼接来写,根据用户的输入来添加相应的条件。
阿_布 2010-01-25
  • 打赏
  • 举报
回复
你可以判断一下用户的输入的表单,
如果单位外码和单位名称都有输入,sql语句如下:
select A.DWBM,A.DWMC,B.XMBM,B.XMMC,B.SFXX,B.SFSX
from A,B,C
where (A.DWBM like '%101%' and A.DWMC like '%xxx%')
and A.DWNM=C.DWNM and B.XMNM=C.XMNM;
如果只输入了单位外码,sql语句如下:
select A.DWBM,A.DWMC,B.XMBM,B.XMMC,B.SFXX,B.SFSX
from A,B,C
where A.DWBM like '%101%
and A.DWNM=C.DWNM and B.XMNM=C.XMNM;
如果只输入了单位名称,sql语句如下:
select A.DWBM,A.DWMC,B.XMBM,B.XMMC,B.SFXX,B.SFSX
from A,B,C
where A.DWMC like '%xxx%'
and A.DWNM=C.DWNM and B.XMNM=C.XMNM;
hyxd2 2010-01-25
  • 打赏
  • 举报
回复
A表:DWNM DWBM DWMC
001 0050501 市劳保局政务中心窗口
002 01010 市烟叶生产领导小组办公室
003 01011 市人民政府妇女儿童工作委员会

B表:XMNM XMBM XMMC
001 99999901 其他非税收入
002 990102 捐赠收入
003 04509902 技校招生报名考务费

C表:DWNM XMNM
001 003
002 001
003 002

如果在输入单位编码101的时候要求显示的结果:
单位编码 单位名称 项目编码 项目名称
01010 常德市烟叶生产领导小组办公室 99999901 其他非税收入
01011 常德市人民政府妇女儿童工作委员会 990102 捐赠收入
bunrise 2010-01-25
  • 打赏
  • 举报
回复
select *
from (select rownum r,
A.DWBM,
A.DWNM,
A.DWMC,
B.XMBM,
B.XMMC,
B.SFXX,
B.SFSX
from a, b, c
where a.DWNM = c.DWNM
and c.XMNM = b.XMNM
and regexp_like('aa', a.DWNM)
and regexp_like('aa', a.DWWM))
where rn > 0
and rn < 10
阿_布 2010-01-25
  • 打赏
  • 举报
回复
你列出一部分数据出来,这样别人可以在自己的机器上做测试。
hyxd2 2010-01-25
  • 打赏
  • 举报
回复
C表就是把A和B表联系起来的中间表。
hyxd2 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lxd520123 的回复:]
你的表的机构应该是冗余的吧,或者说是按照你现在的描述,只查询B表就应该出你的要的结果啊?

不知道你为什么要3表关联?是否具体描述
[/Quote]

B表里面只有项目的信息,没有单位的信息的。
hyxd2 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zhoupuyue 的回复:]
select A.DWBM,A.DWMC,B.XMBM,B.XMMC,B.SFXX,B.SFSX
from A,B,C
where (A.DWBM like 'DWBM'or A.DWMC like 'DWMC')
and A.DWNM=C.DWNM and B.XMNM=C.XMNM;
[/Quote]

这个查询不能用OR,因为也有可能用户会单位编码和名称同时输入。对不起,我开始没有说清楚。而且这样的结果依然是0.晕了。
bunrise 2010-01-25
  • 打赏
  • 举报
回复
你的表的机构应该是冗余的吧,或者说是按照你现在的描述,只查询B表就应该出你的要的结果啊?

不知道你为什么要3表关联?是否具体描述
hyxd2 2010-01-25
  • 打赏
  • 举报
回复
自己原来写的笨办法使用相同的参数有结果的,就是反应好慢。
阿_布 2010-01-25
  • 打赏
  • 举报
回复
select A.DWBM,A.DWMC,B.XMBM,B.XMMC,B.SFXX,B.SFSX
from A,B,C
where (A.DWBM like 'DWBM' or A.DWMC like 'DWMC')
and A.DWNM=C.DWNM and B.XMNM=C.XMNM;
hyxd2 2010-01-25
  • 打赏
  • 举报
回复
uyerp兄的方法和我自己的好像一样,返回的结果还是0。
搞什么哦 2010-01-25
  • 打赏
  • 举报
回复
修正下:

SELECT *
FROM (SELECT ROWNUM RN, A.D_WCODE, A.D_NAME, B.P_WCODE, B.P_NAME
FROM DEPART A, PROJECT B, PROINFO C
WHERE A.D_NCODE = C.D_NCODE
AND C.P_NCODE = B.P_NCODE
AND A.D_NAME LIKE '%3%'
AND A.D_WCODE LIKE '%1%')
WHERE RN >= 1 --分页变量
AND RN <= 10 --分页变量
hyxd2 2010-01-25
  • 打赏
  • 举报
回复
A表 单位信息表(DWNM"内码",DWBM“外码”,DWMC“名称”)
B表 项目信息表(XMNM “内码”,XMBM“外码”,XMMC“名称”,SFXX “下线”,SFSX“上线”)
C表 单位项目挂接信息表(DWNM“单位内码”,XMNM “项目内码”)

要求显示的结果:
  通过用户输入单位外码DWBM或单位名称DWMC模糊查询出单位外码、单位名称、项目外码、项目名称、上线、下线。
搞什么哦 2010-01-25
  • 打赏
  • 举报
回复
SELECT *
FROM (SELECT A.D_WCODE, A.D_NAME, B.P_WCODE, B.P_NAME
FROM DEPART A, PROJECT B, PROINFO C
WHERE A.D_NCODE = C.D_NCODE
AND C.P_NCODE = B.P_NCODE
AND A.D_NAME LIKE '%3%'
AND A.D_WCODE LIKE '%1%')
WHERE ROWNUM >= 1 --分页变量
AND ROWNUM <= 10 --分页变量
阿_布 2010-01-25
  • 打赏
  • 举报
回复
列出表结构及部分测试数据,想要的结果出来。
hyxd2 2010-01-25
  • 打赏
  • 举报
回复
select A.DWBM,A.DWMC,B.XMBM,B.XMMC,B.SFSX,B.SFXX from A,B,C where A.DWBM like '"+DWBM+"' and A.DWMC like '"+DWMC+"' and C.DWNM = A.DWNM and B.XMNM = C.XMNM

不知道我这么写哪里有问题?返回的数据是0?
whereusejava 2010-01-25
  • 打赏
  • 举报
回复
没用过这样的组合框架
spring_cj 2010-01-25
  • 打赏
  • 举报
回复
创建个视图先

select a.dwnm,a.dwwm,a.dwmc,b.xmnm,b.xmwm,b.xmmc from a,b,c where a.dwnm = c.dwnm and b.xmnm = c.xmnm

然后你再分页
加载更多回复(2)

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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