为什么Select与函数返回重复区别?

时间:2009-11-04 20:11:21

标签: sql-server-2005 select distinct freetexttable

我在同一件事上尝试了两种不同的变体。第一个版本从freetexttable中选择,其他插入到临时表中并从中进行选择。我在第一个版本上尝试了很多变化(选择几个组合,在两个范围,group by,distinct和cast [rank]到一个整数。无论如何,第一个查询始终返回3行,每行有值{{ 1}}而第二个查询始终返回1行,其值为137

这里发生了什么?为什么freetext会返回重复项,为什么它们不会被137select distinct删除?

注意:我想知道原因,而不是如何修复它。我已经有了可接受的解决方法。

group by

3 个答案:

答案 0 :(得分:0)

我猜你的等级是一个整数,它实际上是一个浮点数吗?如果是这样,那么我的下一个猜测是它归结为典型的浮点比较问题。

关于你的临时表,你正在做的是选择所有重复数据,逐字地将它放入临时表中,然后将其转储出来,重复一遍。这可能会取得更大的成功

create table #temp ([rank] int)
insert into #temp
    select [rank] from freetexttable(dbo.vw_PPN, allKeywords, N'foo', 100000 )
    where [key] = 3781054
select distinct [rank] from #temp
drop table #temp

答案 1 :(得分:0)

第一个查询中的子查询返回什么,如果你独立运行它?运行SELECT * FROM (SELECT DISTINCT ...)有点奇怪(虽然它当然应该返回与内部查询完全相同的东西)。

答案 2 :(得分:0)

我永远不会忽视一个好的谜团,但在这种情况下我无法重现这种行为。它可能与自由文本表有关,也可能是您发布了不同问题的查询版本。如果我们能看一下结果会很好:

Select * from freetexttable(dbo.vw_PPN, allKeywords, N'foo', 100000 )

用子查询替换你的自由文本表以允许测试,在这两种情况下我得到一行,即使子查询有三个像你说的那样:

Select Distinct [rank] from 
    (select 137 as [rank], 3781054 as [key] union all 
     select 137, 3781054 union all 
     select 137, 3781054) x
Where [key] = 3781054


137

(1行受影响)

create table #temp ([rank] int)
insert into #temp
    select distinct [rank] from 
        (select 137 as [rank], 3781054 as [key] union all 
         select 137, 3781054 union all 
         select 137, 3781054) x
    where [key] = 3781054
select * from #temp
drop table #temp

(1行受影响)


137

(1行受影响)