Sql 为什么在传递重复值(value1,value1….)时,运算符中返回不同的选择
使用SQLServer2008 为什么IN运算符在选择重复值时返回不同的值 表@temp 当我执行这个查询时Sql 为什么在传递重复值(value1,value1….)时,运算符中返回不同的选择,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,使用SQLServer2008 为什么IN运算符在选择重复值时返回不同的值 表@temp 当我执行这个查询时 SELECT * FROM @temp WHERE x IN (1,1) 它会回来的 x | 1 | 2 | 3 --+------------+-------------+------------ 1 | first 1 | first 2 | first 3 如何使其返回以下内容: x | 1
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只是在每行上测试一个条件。条件是否满足一次或两次并不重要-行要么保留在中,要么被过滤掉
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
这将是连接的正常使用。您也可以使用交叉连接吗?如果您有类似于“SELECT*FROM表”的内容,其中col从另一个表中选择x,该怎么办_table@FreshPrinceOfSO . . . 您可以使用交叉连接,然后使用where子句进行筛选。“不过,我认为这是一种糟糕的风格。”戈登林诺夫我只是好奇而已。谢谢你的解释!
select *
from @temp t join
(<subquery>) s
on t.x = s.x