2

使用 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在这种情况下有什么替代方案?

4

1 回答 1

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

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

于 2013-07-19T20:25:17.797 回答