2015-02-04 111 views
1

因此,我有一個數據庫中有很多化學物質。 我有主要的化學物質在這裏SQL代碼,將在主要產品下分組類似產品

http://postimg.org/image/p1xviagk7/

,在這裏我有一個稍有不同的名稱所有其他化學物質,但它們是相同的。 http://postimg.org/image/dyh76t08h/

有很多的化學物質與NULL ingredient_id

例如: 茶花的主要化學名稱。理想情況下,我想用SQL編寫代碼,如果看到

有機CAMELIA冬蟲夏草(白茶)葉提取物

CAMELIA冬蟲夏草(白茶)葉提取物

將其組合在一起在Camelia的主要成分之下。

它現在的工作方式是,如果我看到的物質與NULL的ingredient_id,我只是在主化學名稱文件夾或其他物質中搜索它的相似名稱,然後如果我找到它我複製ID從找到物質並粘貼到NULL的ingredient_id中。 我有3萬個NULL ingredient_id物質。

是否有一些代碼將與具有相似名稱的其他物質的NULL ingredient_id匹配的物質,然後它會以某種方式複製其成分ID。或者它可以在主化學名稱文件夾下搜索相似的名稱,並且如果找到將使用此ID。

我已經做了一些研究,我發現使用Jaccard索引我可以解決這個問題。

但我是第一個合作社的第一年學生,不知道如何實施它。 如果您需要更多信息或想要我澄清某些事情,請告訴我。

只是一個更新

所以,現在我只是需要一些代碼,會發現所有同類產品中具有相似的名稱,使他們的ID相等。是否有可能這樣做?

+0

你可以嘗試用mysql自然語言搜索[鏈接](http://www.mysqltutorial.org/mysql-natural-language-search.aspx)用於搜索具有相似名稱的產品並獲得具有最佳匹配的產品的成分標識。 – tomcyr

回答

0

您可以嘗試使用通配符聯接:

create table #substances (s_name nvarchar(100)); 
create table #main_ingredients (mi_name nvarchar(100)); 
insert into #substances (s_name) values ('ORGANIC CAMELIA SINENSIS (WHITE TEA) LEAF EXTRACT'),('CAMELIA SINENSIS (WHITE TEA) LEAF EXTRACT'),('HIGH FRUCTOSE CORN SYRUP'),('WHEATFLOUR'); 
insert into #main_ingredients (mi_name) values ('Camelia'),('Fructose'), ('Wheat'); 

select mi_name, 
     s_name 
from #substances as S 
join #main_ingredients as M on 
S.s_name like '%'+mi_name+'%'; 

drop table #substances; 
drop table #main_ingredients;