开发者

Why is Select distinct from function returning duplicates?

开发者 https://www.devze.com 2022-12-10 18:24 出处:网络
I tried two different variations on the same thing.The first version selects from freetexttable, the other insets into a temp table and selects from that.I\'ve tried numerous variations on the first v

I tried two different variations on the same thing. The first version selects from freetexttable, the other insets into a temp table and selects from that. I've tried numerous variations on the first version (select several combinations, at both levels of scope, of group by, distinct, and casting [rank] to an integer. Regardless, the first query consistently returns 3 rows each having value 137 whereas the second query consistently returns 1 row having value of 137.

What is going on here? Why does freetext return duplicates and why aren't they eliminated with select distinct or with group by?

Note: I want to know why, not how to fix it. I already have acceptable workarounds.

select * from
(
select distinct [rank] from freetexttable(dbo.vw_PPN, allKeywords, N'foo', 100000 )
where [key] = 3781054
) as CT

create table #temp ([rank] int)
insert into #temp
    select distinct [rank] from freetexttable(dbo.vw_PPN, allKeywords, N'foo', 100000 )
    where [key] = 3781054
se开发者_JAVA百科lect * from #temp
drop table #temp


I'd guess by the fact that you're casting rank to an integer that it is actually a float? If so, then my next guess would be that it comes down to typical floating point comparison issues.

Regarding your temp table, what you're doing is selecting all the duplicate data, putting it into the temp table verbatim, then just dumping it out, duplicates and all. This might have more success

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


What does the subquery in the first query return, if you run it standalone? Running SELECT * FROM (SELECT DISTINCT ...) is a bit strange (although it should of course return exactly the same thing as the inner query).


I can never ignore a good mystery, but in this case I just couldn't reproduce this behavior. Either its something to do with that freetexttable or maybe you posted a different version of the query which doesn't exhibit the issue. It would have been nice if we could look at the result of :

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

Replacing your freetexttable with a subquery to allow testing, I get one row in both cases, even though the subquery has three like you said :

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

rank


137

(1 row(s) affected)

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 row(s) affected)

rank


137

(1 row(s) affected)

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号