首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 雪地120分跪求图书馆查询图书的查询语句 神仙来帮我 [已结帖,结帖人:chaoslayer]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chaoslayer
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-09 09:39:35 楼主
    我现在是做6个文本框 分别为:bookid bookname booktype author publisher isbn(编号,书名,类型,作者,出版社,ISBN)
    想完成1个组合查询图书的功能

    要求:用户可以在任意1个文本框内输入相关内容,也可以不输入 而且书名 类型 作者 出版社 这4个字段应该为模糊查询 编号和ISBN应该为精确的吧(我个人认为是这样,如果不对 请指正)

    请问 该怎么该怎么写这条SQL语句???? 请神仙 大虾赐教啊....

    写的好的再+100分!!!


    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happyflystone
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

      5

    发表于:2008-08-09 09:47:311楼 得分:0
    bookid bookname booktype author publisher isbn

    --
    create view v_test
    as
    select bookid,isbn,bookname from ta
    union all
    select bookid,isbn,booktype from ta
    union all
    select bookid,isbn,author from ta
    union all
    select bookid,isbn,publisher from ta

    go

    select ...................
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • panfeifeibs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-09 10:00:572楼 得分:0
    效率低一点都用like来吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • suyun911
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-09 10:18:233楼 得分:0
    用like就可以实现的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • szx1999
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-09 10:29:004楼 得分:20
    方法一:
    SQL code
    select * from tb where bookid=Isnull(@bookid,bookid) and (@bookname is null or bookname like '%'+@bookname+'%') and (@booktype is null or booktype like '%'+@booktype+'%') and (@author is null or author like '%'+@author+'%') and (@publisher is null or publisher like '%'+@publisher+'%') and isbn=Isnull(@isbn,isbn)


    方法二:
    SQL code
    declare @sql nvarchar(max) set @sql = ' select * from tb where 1=1 ' if(@bookid is not null) @sql = @sql + ' and bookid='+@bookid if(@bookname is not null) @sql = @sql + ' and bookname like ''%'+@bookid+'%'' ' if... ... exec(@sql)

    另外,like非常影响查询效率,甚用。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tangweikai
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-09 10:36:475楼 得分:40
    你这个用途应该在客户端直接处理或使用储存过程来实现就可以了..
    1.你必须明细这些条件的关联性,确定是不是只要录入了内容同时满足才返回?还是只要任意一个满足也返回.
    2.写个储存过程给你,这样客户端只要传入参数即可.
    SQL code
    Create Procedure QueryBook @bookid nvarchar(20), @bookname nvarchar(20), @booktype nvarchar(20), @author nvarchar(20), @publisher nvarchar(20), @isbn nvarchar(20) as Declare @QueryString nvarchar(1000) Set @QueryString='' if IsNull(@bookid,'')<>'' Set @QueryString=@QueryString+' bookid=''' +@bookid+'''' if IsNull(@bookname,'')<>'' Set @QueryString=@QueryString+ when case @QueryString='' then '' else ' And ' end +' bookname Like ''%' +@bookname+'%''' if IsNull(@booktype,'')<>'' Set @QueryString=@QueryString+ when case @QueryString='' then '' else ' And ' end +' booktype Like ''%' +@booktype+'%''' if IsNull(@author,'')<>'' Set @QueryString=@QueryString+ when case @QueryString='' then '' else ' And ' end +' author Like ''%' +@author+'%''' if IsNull(@publisher,'')<>'' Set @QueryString=@QueryString+ when case @QueryString='' then '' else ' And ' end +' publisher Like ''%' +@publisher+'%''' if IsNull(@isbn,'')<>'' Set @QueryString=@QueryString+' isbn=''' +@isbn+'''' Set @QueryString='select * from book where ' + @QueryString -- 返回查询结果 exec (@QueryString) go

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • GDC_ZhaoYZ0304360
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-09 10:53:226楼 得分:0
    关注
    帮顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • comszsoft
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-09 10:56:307楼 得分:0
    用全文索引吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cl9132008
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 17:02:318楼 得分:0
    学习了。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yangxc_110
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 15:17:519楼 得分:0
    五楼好强,学习了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wwd252
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 13:48:5410楼 得分:0
    引用 4 楼 szx1999 的回复:
    方法一:

    SQL code
    select * from tb
    where bookid=Isnull(@bookid,bookid)
    and (@bookname is null or bookname like '%'+@bookname+'%')
    and (@booktype is null or booktype like '%'+@booktype+'%')
    and (@author is null or author like '%'+@author+'%')
    and (@publisher is null or publisher like '%'+@publisher+'%')
    and isbn=Isnull(@isbn,isbn)


    方法二:

    SQL code
    declare @sql nvarchar(m…
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zoujp_xyz
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 15:05:5111楼 得分:0
    SQL code
    CREATE PROC Book ( @bookid nvarchar(20), @bookname nvarchar(20), @booktype nvarchar(20), @author nvarchar(20), @publisher nvarchar(20), @isbn nvarchar(20) ) AS SET NOCOUNT ON DECLARE @sql nvarchar(4000) SET @sql='SELECT * FROM tbname WHERE 1=1' +CASE WHEN @bookid IS NULL THEN '' ELSE ' AND bookid=@bookid' END +CASE WHEN @bookname IS NULL THEN '' ELSE ' AND bookname=@bookname' END +CASE WHEN @booktype IS NULL THEN '' ELSE ' AND booktype=@booktype' END +CASE WHEN @author IS NULL THEN '' ELSE ' AND author=@author' END +CASE WHEN @publisher IS NULL THEN '' ELSE ' AND publisher=@publisher' END +CASE WHEN @isbn IS NULL THEN '' ELSE ' AND isbn=@isbn' END EXEC sp_executesql @sql,N' @bookid nvarchar(20), @bookname nvarchar(20), @booktype nvarchar(20), @author nvarchar(20), @publisher nvarchar(20), @isbn nvarchar(20) ',@bookid,@bookname,@booktype,@author,@publisher,@isbn GO
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zoujp_xyz
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 15:14:3112楼 得分:40
    应该是这样;没看到是模糊查询
    SQL code
    CREATE PROC Book ( @bookid nvarchar(20), @bookname nvarchar(20), @booktype nvarchar(20), @author nvarchar(20), @publisher nvarchar(20), @isbn nvarchar(20) ) AS SET NOCOUNT ON DECLARE @sql nvarchar(4000) SET @sql='SELECT * FROM tbname WHERE 1=1' +CASE WHEN @bookid IS NULL THEN '' ELSE ' AND bookid=@bookid' END +CASE WHEN @bookname IS NULL THEN '' ELSE ' AND bookname like ''%'+@bookname+'%''' END +CASE WHEN @booktype IS NULL THEN '' ELSE ' AND booktype like ''%'+@booktype+'%''' END +CASE WHEN @author IS NULL THEN '' ELSE ' AND author like ''%'+@author+'%''' END +CASE WHEN @publisher IS NULL THEN '' ELSE ' AND publisher like '%''+@publisher+'%''' END +CASE WHEN @isbn IS NULL THEN '' ELSE ' AND isbn like '%''+@isbn+'%''' END EXEC sp_executesql @sql,N' @bookid nvarchar(20), @bookname nvarchar(20), @booktype nvarchar(20), @author nvarchar(20), @publisher nvarchar(20), @isbn nvarchar(20) ',@bookid,@bookname,@booktype,@author,@publisher,@isbn GO
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved