为什么IN运算符在传递重复值(value1,value1 ....)时返回不同的选择

时间:2013-07-19 20:22:36

标签: sql sql-server sql-server-2008

使用SQL Server 2008

为什么IN运算符在选择重复值时会返回不同的值?

@temp

x |      1     |       2     |      3
--+------------+-------------+------------
1 |   first 1  |    first 2  |    first 3
2 |   Second 1 |    second 2 |    second 3 

执行此查询时

SELECT * FROM @temp WHERE x IN (1,1) 

它会返回

x |      1     |       2     |      3
--+------------+-------------+------------
1 |   first 1  |    first 2  |    first 3

我怎样才能这样做,所以它会返回:

x |      1     |       2     |      3
--+------------+-------------+------------
1 |   first 1  |    first 2  |    first 3
1 |   first 1  |    first 2  |    first 3

在这种情况下,IN的替代方案是什么?

1 个答案:

答案 0 :(得分:5)

如果要返回重复项,则需要将查询标记为joinin只是测试每一行的条件。无论条件是满足一次还是两次都无关紧要 - 行要么留在中,要么被过滤掉。

with xes as (
      select 1 as x union all
      select 1 as x
     )
SELECT *
FROM @temp t join
     xes
     on t.x = xes.x;

编辑:

如果你有一个子查询,那就更简单了:

select *
from @temp t join
     (<subquery>) s
     on t.x = s.x

这将是join的“正常”使用。