在 MySQL 中连接 table A 的行和 table B 的列

Join rows of table A with columns of table B in MySQL

我有两个 table,A 和 B。

Table A包含样本列表,这些样本有编号,但也有字符id。它的形式是

sample_num    sample_id  
1              id_1   
2              id_2
.              .
.              .
.              .
n              id_n

Table B 包含每个样本的基因表达数据。它的形式是

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

理想情况下,我会将样本作为行,将基因作为列,但是,MySQL 的基因太多无法作为列存储,所以我无法真正改变这一点。

现在,我得到了样本 ID 的子集,并被要求 return 相关的基因表达数据。但我不知道如何执行所需的连接。我需要加入来自 table B 的 identifiers 列和来自 table A 的 sample_num 列。

例如,如果我可以转置 table B,这会很容易,但我不知道这是否可能,因为列数有限制。

关于您在评论中所说的内容:

The structure of table B isn't fixed actually, which I guess is a bad thing. If a new sample is added, a new column is added to table B, and a new row is added to table 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

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

probe_num gene_num gene_value
15        2714     value_for_gene_2714_of_probe_15

您的 table 可能会有很多行(没问题!)

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

SELECT * FROM TABLE_B
WHERE probe_num = 15;

最后,你可以将它与table 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';