只是一个简单的问题。我正在使用由用户手动输入的单个值,并执行与两列相比较的SQL查询,例如:
SELECT col3,col1,col4 FROM table WHERE
col1='SomeReallyLongText' OR col2='SomeReallyLongText'
SomeReallyLongText的重复是可以容忍的,但我的程序还支持循环遍历数百行的Excel文档 - 这意味着我将会这样做:
SELECT col3,col1,col4 FROM table WHERE
col1 IN('item1','item2',...'itemN') OR col2 IN('item1','item2',...'itemN')
查询将是详尽的,我无法想象这是有效的。 有没有办法缩短这样可以将两列与同一个IN(xxx)集进行比较?
如果没有,是否有其他(更有效的)方法在查询中给出一组值?
(我正在使用带有.NET 4.0 Client Profile的C#,使用Excel Interop访问该文件)
答案 0 :(得分:3)
我不太确定你会得到的表现:
SELECT col3,col1,col4 FROM table
WHERE EXISTS (
SELECT 1
FROM (VALUES
('item1')
, ('item2')
, ...
, ('itemN')
) AS It(m)
WHERE It.m IN (col1, col2, ...)
)
答案 1 :(得分:1)
您可以创建临时表来存储IN
子句
IF OBJECT_ID('tempdb..#Sample') IS NOT NULL DROP TABLE #Sample
Create table #Sample
(name varchar(20))
Insert into #Sample
values
('item1'),('Item2'),....
SELECT col3,col1,col4 FROM table WHERE
col1 IN ( Select name from #Sample) OR col2 IN(Select name from #Sample)
或者如果您使用Linq to SQL
,则可以将Excel数据存储在集合中,并使用Contains
方法查询数据库
var excelVal = new string[] { 'item1','item2'... };
var result = from x in Table
where excelVal .Contains(x.Col1) || excelVal.Contains(x.Col2)
select x;