0

タブで区切られた2列のファイル「cluster-refSeq.csv」があり、次のような何千ものエントリがあります。

chr10_100486611_100486680_+     NM_053314
chr10_102864904_102865004_-     NM_001013042
chr10_103280127_103280156_-     NM_001013042

ここで、「クラスター」列のエントリは一意ですが、複数のrefSeqにリンクできます。

次のような何千ものエントリを含む別のファイル「refSeq-symbol.csv」があります。

NM_053314       Kcnj16
NM_053316       Ip6k1
NM_053317       Nr0b1

ここで、refSeq列のエントリは一意ですが、記号以外にリンクすることができます。

これらの各ファイルの行は一意です(重複するエントリはありません)。

これらの2つのファイルを結合して、最初のファイルのクラスターエントリがrefseqエントリを介して2番目のファイルのシンボルエントリにリンクされるようにします。可能な限り有効な組み合わせが必要です。私が欲しいのはLEFTOUTERJOINだと思います。

必要な出力は次のようになります。

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を使用します

しかし、質問に書いたことを達成したい場合は、 LEFT JOINの代わりにINNER 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
于 2012-09-06T05:14:59.570 に答える