求助:SQL查询,不同组合查询的实现?
现在需要执行一个查询语句,从两个表中查询。有A、B、C三种输入条件,每次都接收,但是不一定都有输入值,不同的组合查询出不同的结果(有输入条件的情况),比如说:
1.A有值,B、C没有
select * from TableA as A inner join TableB as B
on A.Id = B.Id AND ( B.Type = 1 )
2.A、B有值,C没有
select * from TableA as A inner join TableB as B
on A.Id = B.Id AND ( B.Type = 1 AND B.Type = 2 )
................
但是如果要把所有情况遍历的话,得用多个if语句(上层是vc 用ADO执行):A、B、C、AB、AC、BC、ABC 如果有4个或者更多条件,组合就更多!!!
怎么才能用一个语句或者少量的语句完成操作?
分不多,能给的都给了,请各位高手指点一下!谢谢了!
[解决办法]
declare @sql nvarchar(max)declare @a varchar(10),@b varchar(10),@c varchar(10);select @a='2',@b='',@c='';select @sql='select * from TableA as A inner join TableB as B on A.Id = B.Id AND ((('''+isnull(@a,'''')+'''<>'''' and B.Type=1) or 1=1) and (('''+isnull(@b,'''')+'''<>'''' and B.Type=2) or 1=1)and (('''+isnull(@c,'''')+'''<>'''' and B.Type=3) or 1=1))'exec(@sql)
[解决办法]
参考
select * from TABLEA a join TABLEB b on a.id=b.idwhere ( len(a.A)=0 or a.A is null or a.A=@A )and ( len(a.B)=0 or a.B is null or a.B=@B )and ( len(a.C)=0 or a.C is null or a.C=@C )
[解决办法]
select * from TableA as A inner join TableB as B on A.Id = B.Id where B.Type=(case when @A is null or @A='' then B.type else @A end)and B.Type=(case when @B is null or @B='' then B.type else @B end)ANDB.Type=(case when @C is null or @C='' then B.type else @C end)
[解决办法]
这问题楼主是不是想复杂了。
我们来看下,具体执行是按条件不同所以执行的语句不同,不同点在于其后列筛选的条件,那么楼主最终在数据库执行的就是一条SQL语句,至于取哪个条件,难道程序里不能在拼接SQL字符串的时候处理么?
switch(type){
case when 0: sql = sql + '';
case when 1: sql = sql + '';
break;
}
差不多是这种写法吧!或者 if {} else if {} ... else {} 等。