在IN子句中使用相同的表返回不同的结果 - 我期待相同!

时间:2010-10-29 14:14:48

标签: sql sql-server-2005 tsql

我在两个临时表中读了两个excel表,#temp和#temp1 替换IN子句中的表将返回不同的resutls。我期待同样的事情。谁能解释一下?

select * from #temp where name in (select comp_name from #temp1)

返回473条记录。

select * from #temp1 where comp_name in (select name from #temp)

返回1421条记录

4 个答案:

答案 0 :(得分:1)

temp1中具有相同comp_name的多个记录的可能性?所有这些都将匹配temp2

中的名称值

答案 1 :(得分:0)

在最简单的情况下,假设#temp总共有473行,#temp1总共有1421行,两个表中的所有名称/ comp_name都是相同的值。

答案 2 :(得分:0)

肯定取决于您的数据。如果您有下面的数据,那么您将遇到类似的问题。

#temp
Name  CompName
A     X
A     Y
A     Z

#temp1
Name  CompName
A     X
B     X
C     A

在这种情况下:

select * from #temp where name in (select comp_name from #temp1)

返回3行

select * from #temp1 where comp_name in (select name from #temp)

返回1行

答案 3 :(得分:0)

如果#temp1中的comp_name值重复,而#temp中只有一个name

  • 它只会在第一个查询中匹配一次,因此返回一行
  • 第二个查询将为每个副本提供一行

DISTINCT做了什么?

注意:如果两个表具有相同的行数且相同的数字(如果每个值重复),则查询只能始终返回相同的数据。如果数据不同,它可能会巧合地返回相同的数字。