我在同一件事上尝试了两种不同的变体。第一个版本从freetexttable
中选择,其他插入到临时表中并从中进行选择。我在第一个版本上尝试了很多变化(选择几个组合,在两个范围,group by,distinct和cast [rank]到一个整数。无论如何,第一个查询始终返回3行,每行有值{{ 1}}而第二个查询始终返回1行,其值为137
。
这里发生了什么?为什么freetext会返回重复项,为什么它们不会被137
或select distinct
删除?
注意:我想知道原因,而不是如何修复它。我已经有了可接受的解决方法。
group by
答案 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行受影响)