2016-05-03 21 views
1

における表Bの列を持つ表Aの行に参加し、AとB私は2つのテーブルを持っているMySQLの

表Aは、番号付けされているサンプルのリストを含むだけでなく、文字のIDを持っています。表Bは、各サンプルについての遺伝子発現データを含む。それは私が実際にこれを変更することはできませんので、MySQLは列として格納するための列が、しかし、あまりにも多くの遺伝子があると理想的には私が行としてサンプル、および遺伝子を持っているでしょうフォーム

 
probe_num  1 2 . . . n  
1    
2 
. 
. 
. 
m 

を持っています。

ここで、サンプルIDのサブセットを与えられ、関連する遺伝子発現データを返すように求められました。しかし、私は必要な結合を実行する方法を把握することはできません。テーブルBの列にテーブルAのsample_num列を追加する必要があります。

これは、テーブルBを転置するなどの方法では簡単ですが、これが可能かどうかわかりません列の数の制限が与えられていないか、または指定されていません。

+1

プローブと式ごとに1つの行がある接合テーブルが必要です。データの「配列」を別々の列に格納することは、一般的には悪い考えです。 –

+0

テーブルBの正確な(そして固定された)構造は何ですか?それはどのフィールドにありますか?カラム '識別子'を参照する場合、その名前のフィールドを意味するか、フィールド1、フィールド2、または...を参照していますか? – MarcM

+0

@MarcMフィールドは、テーブルAのsample_numカラムのエントリに対応します。テーブルBの構造は実際には固定されていません。これは悪いことです。新しいサンプルが追加されると、新しい列がテーブルBに追加され、新しい行がテーブルAに追加されます。 –

答えて

3

あなたがコメントで言うことについて:私は推測

テーブルBの構造は、実際に固定されていないが、悪いことです。新しいサンプルが追加されると、新しい列がテーブルBに追加され、新しい行がテーブルAに追加されます。

明らかに、これは悪いリレーショナルデザインです。

Table B 
probe_num gene_num gene_value 
1   1  value_for_gene_1_of_probe_1 
1   2  value_for_gene_2_of_probe_1 
1   3  value_for_gene_3_of_probe_1 
1   4  value_for_gene_4_of_probe_1 
...and so on for probe_1 
2   1  value_for_gene_1_of_probe_2 
2   2  value_for_gene_2_of_probe_2 
2   3  value_for_gene_3_of_probe_2 
2   4  value_for_gene_4_of_probe_2 

は今、あなたは貴様プローブの異なる遺伝子の情報を保存することができます

は代わりに、私はあなたが別のaproach(メートル関係nに使用されるもの)を使用することをお勧めします。新しい遺伝子に関する新しいデータが出現すれば、データ構造を変更する必要はありません。テーブルに新しい行を追加するだけです。このような

probe_num gene_num gene_value 
15  2714  value_for_gene_2714_of_probe_15 

としてのあなたのテーブルは、おそらくラインがたくさんあります

プローブ15に関連するすべての遺伝子情報の取得については(ない問題を!):最後に

SELECT * FROM TABLE_B 
WHERE probe_num = 15; 

を、あなたが関連付けることができます

SELECT * FROM TABLE_B 
JOIN TABLE_A ON TABLE_A.sample_num = TABLE_B.sample_num 
WHERE TABLE_A.sample_id LIKE 'id_2'; 
関連する問題