关于高效率查询 根据三个值查询

liujintaozyc 2010-01-28 11:35:02
表中的字段为
id title classid1 classid2 price address name content time
现在根据title classid1 classid2去查询 怎样查啊 还有先判断这三个是否为空
那中方法比较简单效率高 怎样去判断
比如title为空,就只按照classid1,classid2查询 classid1为空,就按照title和classid2查询……
急救 先谢谢了
...全文
95 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
caobingyi 2010-01-28
  • 打赏
  • 举报
回复
应该是这样

//判断的条件,也可以在程序里写好,比如
string sql = "select * from TableName where 1=1 ";
if (title != '')
{
sql += " and title = '" + title + "'";
}
//...


//最后,执行sql就可以了.如果都为空,就返回全部记录.

caobingyi 2010-01-28
  • 打赏
  • 举报
回复

//判断的条件,也可以在程序里写好,比如
string sql = "select * from TableName where 1=1 ";
if (title <> '')
{
sql += " and title = '" + title + "'";
}
//...


//最后,执行sql就可以了.如果都为空,就返回全部记录.

SQL77 2010-01-28
  • 打赏
  • 举报
回复
SELECT * FROM TB WHERE 
classid1=ISNULL(@classid1,classid1) AND
classid2=ISNULL(@classid2,classid2) AND
classid3=ISNULL(@classid3,classid3)
???????
是这个意思?
liujintaozyc 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jwdream2008 的回复:]
SQL codeselect*from TableNamewhere (classid1=@classid1or@classid1isnull)And (classid2=@classid2or@classid2isnull)And (title=@titleor@titleisnull)
???
[/Quote]
这样速度有点慢
我想单个判断 这样是不是速度会快点啊
liujintaozyc 2010-01-28
  • 打赏
  • 举报
回复
这样速度有点慢
我想单个判断 这样是不是速度会快点啊
Jane_64 2010-01-28
  • 打赏
  • 举报
回复
select id,title,classid1,classid2,price,address,name,content time
from TableName
where (classid1=@classid1 or @classid1 is null)
And (classid2=@classid2 or @classid2 is null)
And (title =@title or @title is null)
jwdream2008 2010-01-28
  • 打赏
  • 举报
回复
select * from TableName where (classid1=@classid1  or @classid1  is null)
And (classid2=@classid2 or @classid2 is null)
And (title =@title or @title is null)

???
liujintaozyc 2010-01-28
  • 打赏
  • 举报
回复
明白 谢了啊
SQL77 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 liujintaozyc 的回复:]
引用 5 楼 sql77 的回复:
SQL codeSELECT*FROM TBWHERE
classid1=ISNULL(@classid1,classid1)AND
classid2=ISNULL(@classid2,classid2)AND
classid3=ISNULL(@classid3,classid3)???????
是这个意思?

我传过来的classid默认都是0
如果是0  就查询全部 
如果不是0  而是其他具体的值  就按照值进行查询
[/Quote]
晕,那你NULL判断???????
WHERE
classid1=CASE WHEN @classid1=0 THEN classid1 ELSE @classid1 END
AND
.......
liujintaozyc 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hdf007 的回复:]
select * from TableName where isnull(title,'')+isnull(classid1,'')+isnull(classid2,'')=?
[/Quote]
是什么意思啊
hdf007 2010-01-28
  • 打赏
  • 举报
回复
select * from TableName where isnull(title,'')+isnull(classid1,'')+isnull(classid2,'')=?
liujintaozyc 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sql77 的回复:]
SQL codeSELECT*FROM TBWHERE
classid1=ISNULL(@classid1,classid1)AND
classid2=ISNULL(@classid2,classid2)AND
classid3=ISNULL(@classid3,classid3)???????
是这个意思?
[/Quote]
我传过来的classid默认都是0
如果是0 就查询全部
如果不是0 而是其他具体的值 就按照值进行查询

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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