使用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
的替代方案是什么?
答案 0 :(得分: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;
编辑:
如果你有一个子查询,那就更简单了:
select *
from @temp t join
(<subquery>) s
on t.x = s.x
这将是join
的“正常”使用。