导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

where中的条件分析

baisun 2007-12-04 09:24:49
如果aa表中AN<>''就用
select * from aa where AN<>'' and CN='123'
如果aa表中AN=''就用
select * from aa where CN='123'
把他们合成一个句子怎么写?
...全文
349 点赞 收藏 30
写回复
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
liujuns 2008-09-16
select * from tb
where
((AN <>'' and CN='123') or(CN='123') )
回复
shuiniu 2007-12-06
同理,代码可以精简一点


select * from @table a where
cn = 123 and (an = all(select an from @table b where a.cn = b.cn) or an <> '')
回复
shuiniu 2007-12-06

declare @table table(id int,an char(1),cn int)

insert @table
select 1,'a',121
insert @table
select 2,'',123
insert @table
select 3,'s',123

select * from @table a where (cn = 123 and an = all(select an from @table b where a.cn = b.cn))
or (cn = 123 and an <> '')

/*
id an cn
----------- ---- -----------
3 s 123
*/

delete from @table where id = 3

select * from @table a where (cn = 123 and an = all(select an from @table b where a.cn = b.cn))
or (cn = 123 and an <> '')
/*
id an cn
----------- ---- -----------
2 123
(1 row(s) affected)
*/
回复
ainy360 2007-12-06
楼主和最上面的都很牛
回复
xuebin801125 2007-12-06
樓主很有意思,不過一個語句可能辦不到啦!
回复
天地会-爱人 2007-12-06
select * from a where (AN <> '' and CN='123' ) or (CN='123')
回复
theskyworld 2007-12-05
select * from aa where AN <> '' and CN='123'
union
select * from aa where CN='123'
回复
utpcb 2007-12-05
晕 要么AN<> '' 要么 AN=''是不是啊 这两个合起来不就是没有这个条件吗 那么不就是 select * from aa where CN='123' 我很奇怪楼主的意思
回复
wzy_love_sly 2007-12-04
就是点他名字进他空间看啊 晕
回复
-狙击手- 2007-12-04
web已经> 5000了


---------------------

wzy_love_sly ,什么 意思 ,在哪看这个呀?
回复
wzy_love_sly 2007-12-04
我?比你差远了,天天向你们学习呢
回复
hui_hui_2007 2007-12-04
帮顶一下,没看明白
回复
-狙击手- 2007-12-04
是的,楼主牛,你也牛
回复
wzy_love_sly 2007-12-04
果然是牛人,web已经>5000了 佩服
回复
wzy_love_sly 2007-12-04
呵呵 他可真能搞 牛人
回复
-狙击手- 2007-12-04
楼主要排它,貌似一句搞不定,得加判定
回复
wzy_love_sly 2007-12-04
if(exists(select 1 from tb where an != '' and cn='123') ) 
exec('select * from tb where an !='''' and cn =''123''')
else
exec('select * from tb where an ='''' and cn =''123''')
回复
wzy_love_sly 2007-12-04
drop table tb
create table tb (id int,AN varchar(8000),CN varchar(8000))
insert tb select 1,'a','121'
insert tb select 2,'','123'
insert tb select 3,'s','123'

create table tb (id int,AN varchar(8000),CN varchar(8000))
insert tb select 1,'a','121'
insert tb select 2,'','123'

if(exists(select 1 from tb where an != '' and cn='123') )
print '有'
else
print '无'

if(exists(select 1 from tb where an != '' and cn='123') )
exec('select * from tb where an !='''' and cn =''123''')
else


___________________________________________________________
3 s 123
___________________________________________________________
2 123



回复
-狙击手- 2007-12-04
事实上,排除NULL那么,合并后就是第二句:
select * from aa where CN='123'

回复
baisun 2007-12-04
比如,
如果表aa为
ID AN CN
1 a 121
2 123
3 s 123
...

查询结果要:
ID AN CN
3 s 123
-------------------------
如果表aa为
ID AN CN
1 a 121
2 123
...
查询结果要:
ID AN CN
2 123
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告