Sql 查找行之间的匹配和相似性

Sql 查找行之间的匹配和相似性,sql,oracle11g,oracle-sqldeveloper,Sql,Oracle11g,Oracle Sqldeveloper,我的Oracle DB在设计上遇到了一个问题。 我有一些样本(样本有唯一的名称),每个样本都有一些位点(位点有唯一的名称)。在每个轨迹中,都有一系列的Allel值,如下例所示: +--------+------------+----------+ |Name | Locus | Allel | +--------+------------+----------+ |F70 | DX61 | 10,11,12 | |F70 | DX60

我的Oracle DB在设计上遇到了一个问题。 我有一些样本(样本有唯一的名称),每个样本都有一些位点(位点有唯一的名称)。在每个轨迹中,都有一系列的Allel值,如下例所示:

+--------+------------+----------+
|Name    | Locus      | Allel    |
+--------+------------+----------+
|F70     | DX61       | 10,11,12 |
|F70     | DX60       | 10,12    |
|E70     | DX61       | 10,12    |       
|E70     | DX60       | 10,11,12 |
|S70     | DX61       | 11,13    |
我需要做的是:

当我从用户(SampleName、LocusName、Allel)处获得样本时,我需要找到与我的输入值匹配的样本,匹配意味着:对应轨迹的Allel值之间没有差异,或者即使它们在一个轨迹中不同,它仍然是匹配的。 如果两个或更多的轨迹有不同的值,我需要找到它们之间的相似性百分比。 例如: 如果输入为:

+--------+------------+----------+
|Name    | Locus      | Allel    |
+--------+------------+----------+
|D70     | DX61       | 10,11,12 |
|D70     | DX60       | 10,12    |
F70是一个匹配项。 E70仍然是一个匹配项,因为它与仅在一个轨迹中的输入不同。 S70不匹配,但现在我必须计算Allel值之间的相似性。S70没有基因座DX60,并且它在基因座DX61的等位基因中有一个相似值,因此相似性为20%(DX60中有2个等位基因缺失,因为它没有,DX61中只有1个等位基因,所以5分之一存在)。 真正让我困惑的是轨迹的顺序可以是任何东西。想象一下,如果我想找到所有匹配的1个输入,我必须考虑所有的样本具有确切的轨迹(S),并有确切的Aell值,那么我必须找到所有的样本,有所有的轨迹和ALE在输入,但他们可能有错配在1个轨迹,甚至没有该轨迹。 还有一点,Allel值用逗号分隔,它们存储为Varchar,因为Allel值不限于数字,并且具有类似O1或L2的值。 我会澄清你的任何问题,但请尝试帮助我解决这个问题。
如何设计查询以查找这些值?我应该在程序端还是服务器端执行所有操作

我想我在今天的某个时候也看到过同样的问题。Deja vuYou应该修复您的数据结构,使每个名称/位点/等位基因有一行。那么这种类型的查询就简单多了。@GordonLinoff你是什么意思?我已经有name/locus/allel了。@GurV是的,有一个错误,我删除了它而不是编辑:)\@Guardian。您正在以分隔字符串存储等位基因。您正在使用字符串存储列表。这很糟糕。