SQL - WHERE(X,Y)IN(A,B)

时间:2014-08-14 13:50:09

标签: sql sql-server

我目前有一些障碍。

我的理论查询看起来像这样:

SELECT * FROM Table WHERE X in (a, b, c) AND Y IN (d, e, f)

所以基本上,我希望所有行都有多列匹配,这意味着:

X,     Y  
1,     2  
3,     4  
5,     6  
7,     8,  
9,    10

如果我希望获得(X=1, Y=2)(X=5, Y=6)的所有行,那么X和Y是相关的,我该怎么做?

(MS SQL2005 +)

2 个答案:

答案 0 :(得分:5)

为什么不像以下那样简单?

WHERE (X = 1 AND Y = 2) OR (X = 5 AND Y = 6) ...

或者,如果您要查找Y(应该是X + 1)的行(基于您的示例),那么:

WHERE Y = X + 1

如果你有如上所述的数千个OR条款,那么我建议你提前填充一个标准表,并将你的查询重写为连接。假设你有这样一个表Criteria(X, Y),那么你的查询变得更加简单:

SELECT Table.*
FROM Table
    INNER JOIN Criteria ON Table.X = Criteria.X AND Table.Y = Criteria.Y

不要忘记在新表中添加索引/外键。

如果由于某种原因您不想提前创建表,可以使用临时表或表变量并在过程中填充它。

答案 1 :(得分:1)

如果X和Y在表格中,那么JOIN将是最干净的:

SELECT * FROM Table  t
INNER JOIN XandY xy 
WHERE tX = xy.X AND t.Y = xy.Y

如果没有表格,我会强烈建议将它们放在一个表格中。 IN仅适用于单值集,并且无法使用多个IN子句排列结果。