[待解决问题] 单表多条件查询sql语句的问题
提问时间: 2008-04-25 17:44
该问题已到期 浏览:264 次
T_USER表中有
[USER_ID] [int] IDENTITY(1,1) NOT NULL,
[USER_LOGIN_NAME] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[USER_REAL_NAME] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[USER_NICK_NAME] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[USER_PASSWORD] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[SEX] [bit] NOT NULL,
[COMMENT] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[BIRTHDAY] [datetime] NULL,
[COUNTRY] [int] NOT NULL,
[PROVINCE] [int] NOT NULL
这些列,现在我要在页面上设置[USER_LOGIN_NAME];[USER_NICK_NAME] ;[BIRTHDAY] 为条件进行查询,当条件全部为空时,查询全部,当其中一个或两个条件为空时,为空的条件不参与查询,这样的话sql怎么写?谢谢。
所有回答(7)
在查询之前,先用程序判断页面中的哪些条件不为空,可乎?
3周前   回答者:水言木 - 菜鸟二级
添加where 1=1
^_^
3周前   回答者:wingoo - 小虾三级
sql = "select * from T_USER where 1=1 "
if(!String.IsNullOrEmpty(txtUserLoginName.Text)){
    sql += " and USER_LOGIN_NAME = " + txtUserLoginName.Text;
}
if(!String.IsNullOrEmpty(txtUserNickName.Text))
    sql += " and USER_NICK_NAME = " + txtUserNickName.Text;
}
if(!String.IsNullOrEmpty(txtBirthday.Text))
    sql += " and BIRTHDAY = " + txtBirthday.Text;
}

3周前   回答者:丁学 - 老鸟四级
丁学的方法就可以。
2周前   回答者:Kenneth Byron - 菜鸟二级
select * from T_USER where USER_LOGIN_NAME like '%@变量%' or USER_NICK_NAME like  '%@变量%' or   BIRTHDAY =@变量
 一条语句就可以了  就这么简单
2周前   回答者:yeyang - 菜鸟二级
SELECT *
FROM T_USER
WHERE 
  (@USER_LOGIN_NAME IS NULL OR USER_LOGIN_NAME = @USER_LOGIN_NAME)
  AND (  (@USER_NICK_NAME IS NULL OR USER_NICK_NAME = @USER_NICK_NAME) )
  AND (  (@BIRTHDAY IS NULL OR BIRTHDAY = @BIRTHDAY) )
2周前   回答者:rex xiang - 菜鸟二级
丁学的不錯,不過我認為 1=1是多余的,可能影響性能
1周前   回答者:jimeper - 菜鸟二级
2周前   丁学 :
to @yeyang:
典型的累死数据库不偿命做法~~~~~~~~~
1周前   丁学 :
to jimeper:
1=1对查询没有影响或者说可以忽略不记,无论是什么数据和语句
没有1=1的话后面的SQL不好拼,因为不知道到哪个语句才会出现,所以也就不知道and要怎么加
1周前   rex xiang :
丁学方法个人不太推荐, 拼凑SQL语句, 不是参数化的查询, 首先就不便于阅读和维护, 而且通常每次提交执行SQL语句都不一样, 数据库引擎应该不会缓存.
我的做法, 性能上没什么太明显的损失, 在WHERE中, @USER_LOGIN_NAME IS NULL, @USER_NICK_NAME IS NULL, @BIRTHDAY IS NULL等等对参数值的判断, 几乎不会有什么性能损耗.
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除