0

我有一个制表符分隔的两列文件“cluster-refSeq.csv”,其中包含数千个这样的条目:

chr10_100486611_100486680_+     NM_053314
chr10_102864904_102865004_-     NM_001013042
chr10_103280127_103280156_-     NM_001013042

这里,“cluster”列中的条目是唯一的,但它们可以链接到多个 refSeq。

我有另一个文件“refSeq-symbol.csv”,其中包含数千个这样的条目:

NM_053314       Kcnj16
NM_053316       Ip6k1
NM_053317       Nr0b1

在这里,refSeq 列中的条目是唯一的,但它们可以链接到多个符号。

每个文件中的行都是唯一的(没有重复的条目)。

我想加入这两个文件,以便第一个文件中的集群条目通过 refseq 条目链接到第二个文件的符号条目。我想要所有可能的有效组合。我想我想要的是一个 LEFT OUTER JOIN。

所需的输出应如下所示:

chr10_100486611_100486680_+     NM_053314       Kcnj16

我试图用 sqlite 做到这一点:

create table alpha (cluster text, refseq text);
create table beta (refseq text, symbol text);
.separator "\t"
.import cluster-refSeq.csv alpha
.import refSeq-symbol.csv beta
select alpha.cluster, alpha.refseq, beta.symbol from alpha left outer join beta on alpha.refseq=beta.refseq;

这确实生成了我想要的输出(我认为),但它确实包含重复的条目!

即,如果我通过 sort 和 uniq 运行输出,我会得到更少的三元组。

我的问题是:我是否真的在做我认为我正在使用上面的 sqlite 代码做的事情,为什么我会得到重复的输出行?如何修复我的 sqlite 代码?

4

2 回答 2

0

如果您在查询中添加 distinct,这将消除重复的行

select distinct alpha.cluster,...
于 2012-09-06T05:08:25.767 回答
0

由于重复的行使用DISTINCT

但是,如果您想实现您在问题中所写的内容,那么我认为您需要INNER JOIN而不是LEFT JOIN

chr10_100486611_100486680_+     NM_053314
chr10_102864904_102865004_-     NM_001013042
chr10_103280127_103280156_-     NM_001013042


NM_053314       Kcnj16
NM_053316       Ip6k1
NM_053317       Nr0b1

使用左连接,输出将是:

chr10_100486611_100486680_+     NM_053314       Kcnj16
chr10_102864904_102865004_-     NM_001013042    NULL
chr10_103280127_103280156_-     NM_001013042    NULL

代替:

chr10_100486611_100486680_+     NM_053314       Kcnj16
于 2012-09-06T05:14:59.570 回答