在MySQL中将表A的行与表B的列连接起来

时间:2016-05-03 11:40:29

标签: mysql join database-design relational

我有两张桌子,A和B.

表A包含样本列表,这些样本已编号,但也具有字符ID。它的格式为

sample_num    sample_id  
1              id_1   
2              id_2
.              .
.              .
.              .
n              id_n
表B包含每个样品的基因表达数据。它的格式为

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

理想情况下,我会将样本作为行,将基因作为列,但是,有太多基因可供MySQL存储为列,因此我无法真正改变它。

现在,我获得了样本id的子集,并要求返回相关的基因表达数据。但我无法弄清楚如何执行所需的连接。我需要使用表A中的sample_num列连接表B中的列标识符

如果我能够转换表B,这将很容易,但我不知道这是否可行,因为列数有限制。

1 个答案:

答案 0 :(得分:3)

关于你在评论中说的话:

  

表B的结构实际上并不固定,我猜这是件坏事。如果添加了新样本,则会向表B添加一个新列,并向表A添加一个新行。

显然,这是一个糟糕的关系设计。

相反,我建议您使用不同的方法(用于n:m关系的方法)

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

现在您可以存储不同探针的不同基因信息。如果出现与新基因相关的新数据,则无需修改数据结构。只需在表格中添加新行即可。如

probe_num gene_num gene_value
15        2714     value_for_gene_2714_of_probe_15

你的桌子可能有很多行(不是问题!)

获取与探针15相关的所有基因信息:

SELECT * FROM TABLE_B
WHERE probe_num = 15;

最后,您可以将其与表A关联如下:

SELECT * FROM TABLE_B
JOIN TABLE_A ON TABLE_A.sample_num = TABLE_B.sample_num
WHERE TABLE_A.sample_id LIKE 'id_2';