在 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';
我有两个 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';