我有一个以制表符分隔的双列文件“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代码?
答案 0 :(得分:0)
如果为查询添加distinct,则会消除重复的行
select distinct alpha.cluster,...
答案 1 :(得分: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
使用Left join,输出将为:
chr10_100486611_100486680_+ NM_053314 Kcnj16
chr10_102864904_102865004_- NM_001013042 NULL
chr10_103280127_103280156_- NM_001013042 NULL
而不是:
chr10_100486611_100486680_+ NM_053314 Kcnj16