求一sql语句!

e_fresh 2008-08-19 09:49:25
为了简单起见,我就举个简单的例子:
有表Movie:
id,name,information,pack_id(id为pk,pack_id为fk,关联表Movie_Package pack_id,表示节目所属的节目包)
表Movie_Package:
pack_id,pack_name,pinformation(pack_id为pk)

说明:表的关系其实很简单,Movie表示节目信息,Movie_Package表示节目包信息,节目包可以包含多个节目,节目包name和节目name有可能存在重名。

现在要做的是:给定一个name(有可能是节目名,也有可能是节目包名,所以需要同时查Movie和Movie_Package两张表),需要找到其相关信息(支持模糊查询).相关信息包括:Movie的相关信息,Movie_Package的相关信息。封装成以下对象,格式如下:
class ProgramInfo {
Movie[] movies; //如果没找到相关节目信息则该字段为Null,封装从Movie表中找到的节目信息
Movie_Package[] packages; //如果没找到相关节目包信息则该字段为Null,封装从Movie_Package表中找到的节//目包信息
}
注:
Movie类定义如下:
class Movie {
Movie表中的字段
}
Movie_Package类定义如下:
class Movie_Package {
Movie_Package表中的字段
Movie[] movies; //封装节目包下的节目信息
}

小弟目前有几个想法:
第一种(最笨的办法,可能效率最慢):
1.从Movie表中按给定的name找节目信息,封装到ProgramInfo—>Movie[]。
2.从Movie_Package表中按给定的name找节目包信息,封装到ProgramInfo—>Movie_Package[]—>Movie_Package
3.利用循环语句,根据找到的Pack_id,多次查询DB,得到每个节目包下的节目信息,封装到ProgramInfo—>Movie_Package[]—>Movie[]。

这个在现实中估计行不通,一是模糊查询的时候数据量可能比较大,而且可能存在并发的情况,另外可能需要考虑分页,小弟第一次用Oracle(版本9i),像我这种情况有没有一种比较好的解决方案:1.考虑性能。2.需要分页。
请指教,谢谢!
...全文
75 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
oracledbalgtu 2008-08-19
  • 打赏
  • 举报
回复

SELECT *
FROM MOVIE M, MOVIE_PACKAGE MP
WHERE M.PACK_ID = MP.PACK_ID
AND (M.NAME LIKE '%name%' OR MP.NAME LIKE '%name%');

[Quote=引用 3 楼 e_fresh 的回复:]
楼上说的有一部分道理,但是考虑到我这个实际需求,因为这样找出来是一堆信息,还需要对这些信息作额外的处理才能把每个节目包和其下的节目信息组装好。
[/Quote]
e_fresh 2008-08-19
  • 打赏
  • 举报
回复
可能会找到的信息如下;
id name information pack_id
1 aaa dsfds A
2 ddd dsfds B
3 ddd eee A
4 eee dfd B

实际上这四条记录只能封装成两个对象,因为只有A,B两个Pack_id
楼上的想法我原来也考虑过,就是按上表找出所有的信息 order by pack_id排序,然后根据pack_id来组包,所有pack_id相同的记录封装成一个对象。发现这样比较麻烦。
e_fresh 2008-08-19
  • 打赏
  • 举报
回复
楼上说的有一部分道理,但是考虑到我这个实际需求,因为这样找出来是一堆信息,还需要对这些信息作额外的处理才能把每个节目包和其下的节目信息组装好。
oracledbalgtu 2008-08-19
  • 打赏
  • 举报
回复
第三步不用多次查啊,使用select * from Movie where pack_id in(Pack_id1,Pack_id2....);一次搞定。
或者要是取包信息的话,用:select * from Movie m,Movie_Package mp where m.pack_id=mp.pack_id and mp.pack_id in(Pack_id1,Pack_id2....);

[Quote=引用楼主 e_fresh 的帖子:]
为了简单起见,我就举个简单的例子:
有表Movie:
id,name,information,pack_id(id为pk,pack_id为fk,关联表Movie_Package pack_id,表示节目所属的节目包)
表Movie_Package:
pack_id,pack_name,pinformation(pack_id为pk)

说明:表的关系其实很简单,Movie表示节目信息,Movie_Package表示节目包信息,节目包可以包含多个节目,节目包name和节目name有可能存在重名。

现在要做的是:给定一个name(有可能是节目…
[/Quote]
e_fresh 2008-08-19
  • 打赏
  • 举报
回复
再说明一下
上文中提到的“节目包name和节目name有可能存在重名”意思是:
节目包的名字有可能与节目的名字相同。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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