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

Min*_*iel 2 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 
Run Code Online (Sandbox Code Playgroud)

当我执行此查询时

SELECT * FROM @temp WHERE x IN (1,1) 
Run Code Online (Sandbox Code Playgroud)

它会回来

x |      1     |       2     |      3
--+------------+-------------+------------
1 |   first 1  |    first 2  |    first 3
Run Code Online (Sandbox Code Playgroud)

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

x |      1     |       2     |      3
--+------------+-------------+------------
1 |   first 1  |    first 2  |    first 3
1 |   first 1  |    first 2  |    first 3
Run Code Online (Sandbox Code Playgroud)

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

Gor*_*off 5

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

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

编辑:

如果你有子查询,那么它甚至更简单:

select *
from @temp t join
     (<subquery>) s
     on t.x = s.x
Run Code Online (Sandbox Code Playgroud)

这将是a的"正常"使用join.