J'ai essayé deux variations différentes sur la même chose. La première version sélectionne de freetexttable
, les autres insère dans une table temporaire et sélectionne à partir de cela. J'ai essayé de nombreuses variantes sur la première version (sélectionnez plusieurs combinaisons, aux deux niveaux de portée, de group by, distinct, et cast [rang] à un entier.) Quoiqu'il en soit, la première requête renvoie systématiquement 3 lignes ayant chacune la valeur 137
alors que la deuxième requête renvoie toujours 1 rang ayant une valeur de 137
Pourquoi Select est-il distinct de la fonction retournant des doublons?
Qu'est-ce qui se passe ici Pourquoi est-ce FreeText les doublons de retour et pourquoi sont-ils pas éliminés avec select distinct
ou group by
note:.? Je veux savoir pourquoi, pas comment y remédier J'ai déjà des solutions de contournement acceptables
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
select * from #temp
drop table #temp
Non, la version de table temp ne ne pas avoir les doublons. Et je pensais que c'était peut-être un flotteur, mais en fait j'essayais juste des trucs au hasard pour essayer de comprendre. Si les problèmes à virgule flottante étaient le problème (ce dont je doute), le lancer dans le select interne et ensuite sélectionner distinct dans le select externe l'aurait corrigé. – Brian