LEFT OUTER JOIN后输出中的重复条目

时间:2012-09-06 04:40:39

标签: sql sqlite left-join

我有一个以制表符分隔的双列文件“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代码?

2 个答案:

答案 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