SQL Server如何实现多列子查询
SQL Server怎么实现多列子查询?
有一个表T, 有键值对Col1、Col2
Col1 Col2 Col3
----------------------------------------------------
1 1 XXX
1 2 XXX
1 3 XXX
2 1 XXX
2 2 XXX
2 3 XXX
3 1 XXX
3 2 XXX
3 3 XXX
.....
我想写一个类似于下面的多列子查询的语句
select * from T where (Col1, Col2) in ((1, 2), (2, 1), (3, 3), ......)
就是想指定一些键值的集合来查询
------解决思路----------------------
select * from t where cast(col2 as varchar) + '@' + col3 in ('1@XXX','2@XXX',....)
------解决思路----------------------
@是特殊符号,你可以用其他的,例如 , ;
------解决思路----------------------
$ % &等等
------解决思路----------------------
另外也不建议你这么做,能说说具体逻辑么?
难道不能用
select * from t where col2 = ? and col3 = ?
这种语法查询数据?
如果是多行数据,先把你输入的数据做一个临时表 @t ,执行查询
select * from t as a where exists (select 1 from @t as b where a.col2 = b.col2 and a.col3 = b.col3)
------解决思路----------------------
在sql server里不支持这种写法,要写,只能这么写:
select * from T where (Col1=1 and Col2=2) or (Col1=2 and Col2=1) ...
------解决思路----------------------
2楼解释了是特殊符号,起个连接作用,相当于把col2和col3用特殊符号连接起来作为一个字段去处理,一个字段的in会写吧!
------解决思路----------------------
能不能在程序里做处理呢,因为这样 如果键值对很长,实际查询时会比较慢。
能否把 这些键值对 放到一个单独的表里,比如这样;
------解决思路----------------------
应该是这二种效率高
你看下执行计划,小数量效率应该是旗鼓相当
有一个表T, 有键值对Col1、Col2
Col1 Col2 Col3
----------------------------------------------------
1 1 XXX
1 2 XXX
1 3 XXX
2 1 XXX
2 2 XXX
2 3 XXX
3 1 XXX
3 2 XXX
3 3 XXX
.....
我想写一个类似于下面的多列子查询的语句
select * from T where (Col1, Col2) in ((1, 2), (2, 1), (3, 3), ......)
就是想指定一些键值的集合来查询
------解决思路----------------------
select * from t where cast(col2 as varchar) + '@' + col3 in ('1@XXX','2@XXX',....)
------解决思路----------------------
@是特殊符号,你可以用其他的,例如 , ;
------解决思路----------------------
$ % &等等
------解决思路----------------------
另外也不建议你这么做,能说说具体逻辑么?
难道不能用
select * from t where col2 = ? and col3 = ?
这种语法查询数据?
如果是多行数据,先把你输入的数据做一个临时表 @t ,执行查询
select * from t as a where exists (select 1 from @t as b where a.col2 = b.col2 and a.col3 = b.col3)
------解决思路----------------------
在sql server里不支持这种写法,要写,只能这么写:
select * from T where (Col1=1 and Col2=2) or (Col1=2 and Col2=1) ...
------解决思路----------------------
2楼解释了是特殊符号,起个连接作用,相当于把col2和col3用特殊符号连接起来作为一个字段去处理,一个字段的in会写吧!
------解决思路----------------------
能不能在程序里做处理呢,因为这样 如果键值对很长,实际查询时会比较慢。
能否把 这些键值对 放到一个单独的表里,比如这样;
declare @t table(col1 int,col2 int)
insert into @t
values(1,2),(2,1),(3,3)
--select * from @t
select * from T inner join @t tt on tt.col1 = t.col1 and tt.col2 = t.col2
------解决思路----------------------
应该是这二种效率高
你看下执行计划,小数量效率应该是旗鼓相当