表格列中的sql全文搜索关键字

时间:2016-01-17 12:03:12

标签: sql sql-server full-text-search contains containstable

我有以下查询

INSERT INTO FirstNames select FirstName from temp_names where not exists 
(select FirstName from FirstNames where CONTAINS(FirstName, temp_names.FirstName))

但是我收到错误:'temp_names'附近的语法不正确。

因为由于某种原因无法看到表temp_names。

我尝试使用不包含以下内容的查询:

INSERT INTO FirstNames select FirstName from temp_names where not exists 
(select FirstName from FirstNames where FirstName = temp_names.FirstName)

并且它可以工作,但是当我达到200万以上的记录时,它会变得非常沉重。

如何使用全文搜索并将其传递给列名,就像上面的第一个查询一样?

谢谢。

修改

找到完全匹配并不重要

1 个答案:

答案 0 :(得分:0)

对于此查询:

INSERT INTO FirstName(FirstName)
    select tn.FirstName
    from temp_names tn
    where not exists (select 1
                      from FirstNames fn
                      where fn.FirstName = tn.FirstName
                     );

您需要FirstName(FirstName)上的索引:

create unique index unq_firstname_firstname on FirstName(FirstName);

假设FirstName.FirstNametemp_names.FirstName具有相同的数据类型和排序规则,这应该会加快查询速度。

注意:如果temp_names可能有重复项,那么您真的想要:

INSERT INTO FirstName(FirstName)
    select distinct tn.FirstName
    from temp_names tn
    where not exists (select 1
                      from FirstNames fn
                      where fn.FirstName = tn.FirstName
                     );