我有一种情况,我试图根据部分匹配的文本数据加入两个表。我已阅读问题Using Full-Text Search in SQL Server 2005 across multiple tables, columns,看来我的最佳选择是创建VIEW
并在VIEW
上添加全文索引。
首先让我先介绍一下情况。我有一个Excel电子表格,我需要计算药物的一些定价,但电子表格中的药物名称与我提取定价信息的数据库不完全匹配。所以我认为使用全文搜索可能是最佳选择。
到目前为止,我将电子表格导出为CSV文件并使用BULK INSERT
将数据导入我的数据库。现在,我的药物数据库在NDC
上有一个主键,但不幸的是,该信息在电子表格中不可用,或者我的工作会更容易。
我需要基本上能够匹配'AMLODIPINE TAB 5MG'
和'AMLODIPINE BESYLATE 5MG TAB'
。这只是一个例子,但其他药物是相似的。我的问题是,我甚至不确定如何创建VIEW
以便添加两列,而不匹配。
有没有办法在JOIN
语句中使用全文搜索,例如:
SELECT i.Description, m.ProdDescAbbr
FROM dbo.ImportTable i
LEFT JOIN dbo.ManufNames m ON m.ProdDescAbbr <something similar to> i.Description
修改
并非所有药品名称都包含额外的字词,我想要匹配的另一个例子是:'ACYCLOVIR TAB 800MG'
和'ACYCLOVIR 800MG TAB'
答案 0 :(得分:1)
您可以添加
CREATE VIEW view_name WITH SCHEMABINDING
AS
在SQL前面创建视图。那么你可以
CREATE UNIQUE CLUSTERED INDEX idx_name
ON view_name(Description, ProdDescAbbr)
然后你可以
CREATE FULLTEXT INDEX ON view_name
这将让您使用
进行搜索WHERE CONTAINS( (Description, ProdDescAbbr), 'search_term')
答案 1 :(得分:1)
在我的作品中,我看到了这个(对我来说很奇怪)函数CONTAINSTABLE
,它使用全文索引。对于这种情况可能会有很复杂的功能,但我想分享。
Returns a table of zero, one, or more rows for those columns containing precise or fuzzy (less precise) matches to single words and phrases, the proximity of words within a certain distance of one another, or weighted matches
总的来说,我发现在寻找之前你需要准备搜索条件(make it text)。
示例:
SELECT select_list
FROM table AS FT_TBL
INNER JOIN CONTAINSTABLE(table, column, contains_search_condition) AS KEY_TBL
ON FT_TBL.unique_key_column = KEY_TBL.[KEY];