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) ...


------解决思路----------------------
引用:
不好意思没太看明白,Col3的值的随便,跟查询没什么关系,@是起什么作用的


2楼解释了是特殊符号,起个连接作用,相当于把col2和col3用特殊符号连接起来作为一个字段去处理,一个字段的in会写吧!
------解决思路----------------------
引用:
Quote: 引用:


在sql server里不支持这种写法,要写,只能这么写:

select * from T where (Col1=1 and  Col2=2) or (Col1=2 and  Col2=1) ...


就是感觉这么写语句有点长,如果集合内的键值对多的话


能不能在程序里做处理呢,因为这样 如果键值对很长,实际查询时会比较慢。

能否把 这些键值对 放到一个单独的表里,比如这样;

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

------解决思路----------------------
应该是这二种效率高
你看下执行计划,小数量效率应该是旗鼓相当