我目前有一些障碍。
我的理论查询看起来像这样:
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 +)
答案 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
子句排列结果。