2016-05-03 4 views
1

У меня есть две таблицы, А и В.Регистрация строк таблицы А с колонкам таблицы B в MySQL

Таблица A содержит список образцов, которые пронумерованы, но и имеют символьный идентификатор. Он имеет форму

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

Таблица В содержит данные экспрессии генов для каждого образца. Она имеет вид

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

В идеале я хотел бы иметь образцы в виде строк, а также гены, как колонны, однако, слишком много генов для MySQL для хранения в виде столбиков, так что я действительно не могу это изменить.

Теперь я получил подмножество идентификаторов образцов и попросил вернуть связанные данные выражения гена. Но я не могу понять, как выполнить требуемое соединение. Мне нужно соединить в столбце идентификаторы из таблицы B с колонкой sample_num из таблицы A.

Это было бы легко, если бы я мог, например, переставить таблицу B, но я не знаю, возможно ли это или не указано ограничение на количество столбцов.

+1

У вас должна быть соединительная таблица с одной строкой на зонд и выражение. Хранение «массивов» данных в отдельных столбцах - это, как правило, плохая идея. –

+0

Итак ... Какова точная (и фиксированная) структура таблицы B? Какие поля у него есть? Когда вы ссылаетесь на идентификаторы столбца, вы имеете в виду поле с этим именем или оно относится к полю 1 или поле 2 или ...? – MarcM

+0

@MarcM Поля соответствуют элементам столбца sample_num таблицы A. Структура таблицы 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 

Теперь вы можете хранить информацию о различных генах Дифференцев зондов. Если появляются новые данные, связанные с новыми генами, нет необходимости изменять структуру данных. Просто добавьте новые строки в таблицу. Такие, как

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';