我有两张桌子,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,这将很容易,但我不知道这是否可行,因为列数有限制。
答案 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';