SQL-其中(X,Y)在(A,B)中
我现在有点堵塞 我的理论问题如下所示:SQL-其中(X,Y)在(A,B)中,sql,sql-server,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是相关的,我该怎么做 (mssql2005+)为什么不做以下简单的事情 其中(X
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是相关的,我该怎么做
(mssql2005+)为什么不做以下简单的事情
其中(X=1和Y=2)或(X=5和Y=6).
或者,如果您正在查找Y应为X+1的行(基于您的示例),则:
其中Y=X+1
如果您有数千个类似上述的或子句,那么我建议您提前填充一个Criteria表,并将查询重写为联接。假设您有这样一个表Criteria(X,Y)
,那么您的查询将变得更简单:
SELECT Table.*
FROM Table
INNER JOIN Criteria ON Table.X = Criteria.X AND Table.Y = Criteria.Y
不要忘记在新表中添加必要的索引/外键
如果出于某种原因,您不希望提前创建表,那么可以使用临时表或表变量,并在过程中填充它。为什么不使用以下简单方法
其中(X=1和Y=2)或(X=5和Y=6).
或者,如果您正在查找Y应为X+1的行(基于您的示例),则:
其中Y=X+1
如果您有数千个类似上述的或子句,那么我建议您提前填充一个Criteria表,并将查询重写为联接。假设您有这样一个表Criteria(X,Y)
,那么您的查询将变得更简单:
SELECT Table.*
FROM Table
INNER JOIN Criteria ON Table.X = Criteria.X AND Table.Y = Criteria.Y
不要忘记在新表中添加必要的索引/外键
如果出于某种原因不希望提前创建表,可以使用临时表或表变量并在过程中填充它。如果X和Y在表中,则联接最干净:
SELECT * FROM Table t
INNER JOIN XandY xy
WHERE tX = xy.X AND t.Y = xy.Y
如果没有一张桌子,我强烈建议把它们放在一张桌子上<
中的code>仅适用于单个值集,并且无法在
子句中使用多个来排列结果。如果X和Y在一个表中,则联接将是最干净的:
SELECT * FROM Table t
INNER JOIN XandY xy
WHERE tX = xy.X AND t.Y = xy.Y
如果没有一张桌子,我强烈建议把它们放在一张桌子上<
中的code>仅适用于单个值集,并且无法使用
子句中的多个来排列结果。谢谢。当我有1000个这样的“或”子句时,这种“比例”会增加吗?或者有更好的方法吗?@MichelZ不会,但在
子句中的子句(更不用说在
子句中的两个)也不会。@MichelZ实际上,如果你有很好的索引,criteria table选项可以很好地扩展:即使有1000000个这样的子句,拥有1000个OR子句的主要缺点可能是可维护性。我认为临时表是我缺少的,这听起来不错。谢谢。当我有1000个这样的“或”子句时,这种“比例”会增加吗?或者有更好的方法吗?@MichelZ不会,但在
子句中的子句(更不用说在
子句中的两个)也不会。@MichelZ实际上,如果你有很好的索引,criteria table选项可以很好地扩展:即使有1000000个这样的子句,拥有1000个of OR子句的主要缺点可能是可维护性。我认为临时表是我所缺少的,听起来不错。Y总是等于X+1还是只是巧合?那只是巧合?Y总是等于X+1还是只是巧合?那只是巧合谢谢,我想这是我错过的东西。将这些东西放在临时表中并加入它们看起来很合理。谢谢谢谢,我想这是我错过的东西。将这些东西放在临时表中并加入它们看起来很合理。谢谢