Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-其中(X,Y)在(A,B)中_Sql_Sql Server - Fatal编程技术网

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还是只是巧合?那只是巧合谢谢,我想这是我错过的东西。将这些东西放在临时表中并加入它们看起来很合理。谢谢谢谢,我想这是我错过的东西。将这些东西放在临时表中并加入它们看起来很合理。谢谢