首页 新闻 会员 周边

SQL疑难杂症

0
悬赏园豆:100 [已解决问题] 解决于 2008-08-21 17:25
<P><STRONG>数据库中2个表: 人员表ren , 图书表book</STRONG></P> <P>表ren中字段: renID&nbsp; bookIDs&nbsp; ...</P> <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1,2,3..</P> <P>表book中字段:bookID&nbsp; bookname</P> <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 飘</P> <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 家</P> <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 孙子兵法</P> <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...&nbsp;&nbsp;&nbsp;&nbsp; ...</P> <P>在人员表ren中,字段bookIDs存储的是多个bookID</P> <P>现在请SQL,要求一条SQL语句实现以下需求(不确定具体个数):</P> <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查询出来的内容是&nbsp;&nbsp; renID&nbsp;&nbsp;&nbsp; bookIDs&nbsp; &nbsp;bookname&nbsp;&nbsp; ...</P> <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;1,2,3...&nbsp;&nbsp;&nbsp;&nbsp;飘,家,孙子兵法...</P> <P><STRONG><FONT size=3>希望高手帮忙!</FONT></STRONG></P>
问题补充: 表结构不是很合理。 但是现在不能修改表结构的话,我想得到的记录是: renID bookIDs bookname ... 1 1,2,3... 飘,家,孙子兵法... 请大家帮忙,一条SQL语句可能实现? 请大家想想办法吧 急需!!
冷眸的主页 冷眸 | 初学一级 | 园豆:30
提问于:2008-08-13 11:57
< >
分享
最佳答案
0
楼主的问题,如果是用Sql Server数据库的话,写两个函数,然后就可以写一条Sql语句解决,语句如:Select renID, bookIDs, bookname=dbo.FGetItemsDepartment(bookIDs) From ren; 其中FGetItemsDepartment这个函数是专用的,需要修改,代码如: http://hi.baidu.com/84ww/blog/item/b6e826d538488bc251da4b2d.html FGetItemsDepartment函数里面又调用了Split函数,这个是通用的,代码如: http://hi.baidu.com/84ww/blog/item/58e2a425e6e0096634a80f90.html
启程 | 小虾三级 |园豆:570 | 2008-08-16 00:18
其他回答(5)
0
你要1对多还是多对多?
zeus2 | 园豆:92 (初学一级) | 2008-08-13 12:11
0
把表结构设计成这样,sql语句都没法写呀。 你可以这么写 select DISTINCT b.bookid,b.bookname from book b,ren r cross apply splitIDs(r.bookIDs) as bookIds WHERE r.renID = @renId crossapply和splitIDs函数参照下面随笔: http://www.cnblogs.com/yukaizhao/archive/2008/04/30/cross_apply.html
玉开 | 园豆:8822 (大侠五级) | 2008-08-13 13:30
0
这个必须要通过程序处理才行=。= 但是人如果显示成 查询出来的内容是 renID bookIDs bookname ... 1 1 飘 1 2 家 是上图这样还是可以的 2个表连查就可以
小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2008-08-13 13:37
0
用存储过程吧.
HiEagle | 园豆:225 (菜鸟二级) | 2008-08-13 22:47
0
表的设计确实有问题....不知道是故意的还是疏忽了?如果是疏忽了,建议看一下范式部分
有所为,有所不为 | 园豆:1200 (小虾三级) | 2008-08-14 10:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册