我不确定IN子句的功能,因此我想知道是否可以安全地运行查询。据我了解,在SQL Server中使用IN子句时会创建一系列OR语句: 例如
SELECT * FROM table WHERE column IN (1, 2, 3, 4, 5, 6)
将与以下相同:
SELECT * FROM table WHERE column = 1 OR column = 2 OR column = 3 OR column = 4 OR column = 5 OR column = 6
但是当执行这样的操作时会发生什么:
SELECT * FROM table WHERE column IN (1, 2, 3) and column2 IN (4,5,6) and column 3 IN (5,7,8)
这里我想知道是否,例如,第一个IN中的某个值在第二个IN中有两次出现,它将检索两个结果,还是按1、4和5的顺序执行( IN子句)
我想运行带有8个参数的查询,我需要在数据库中检查(通过C#发送),但是我不想用很多OR这样构建一个超大型查询(因为它将+ 9万条记录)
SELECT * FROM table WHERE (column = 1 and column2 = 4 and column3 = 5 ) or
(column = 2 and column2= 5 and column3 = 7) OR ....
或者我不知道是否有更好的方法来解决这个问题,我愿意接受想法。
谢谢
答案 0 :(得分:5)
IN
是单独的条件,因此逻辑等效于:
where (column1 = 1 or column1 = 2 or column1 = 3) and
(column2 = 4 or column2 = 5 or column2 = 6)
请注意,这是逻辑等价物。例如,某些数据库通过创建用于搜索值的二叉树来使用常量列表来优化IN
。我不认为SQL Server会进行这种优化。
如果要“对齐”,则某些数据库(而不是SQL Server)支持使用IN
的元组:
where (column1, column2) in ( (1, 4), (2, 5), (3, 5) )
这总是可以表示为:
where (column1 = 1 and column2 = 4) or
(column1 = 2 and column2 = 5) or
(column1 = 3 and column2 = 6)