1 для отношения r в одном столбце - PullRequest
1 голос
/ 14 марта 2020

В моей базе данных mysql есть таблица, в которой одно из полей создает отношение 1 -> N для другой таблицы.

Мой запрос:

select    
rc.trial_id,
(select label from vocabulary_interventioncode where id = (select interventioncode_id from repository_clinicaltrial_i_code where clinicaltrial_id = rc.id limit 1)) as interventioncode
from 
repository_clinicaltrial rc;

i Я использую:

(select label from vocabulary_interventioncode where id = (select interventioncode_id from repository_clinicaltrial_i_code where clinicaltrial_id = rc.id limit 1))

с пределом 1 для таблицы vocabulary_interventioncode , чтобы не получить ошибку в запросе.

Возможно ли это объединить все результаты запроса:

(select label from vocabulary_interventioncode where id = (select interventioncode_id from repository_clinicaltrial_i_code where clinicaltrial_id = rc.id))

и поместить все результаты в один столбец?

Ответы [ 2 ]

1 голос
/ 14 марта 2020

Похоже, вы ищете group_concat:

SELECT   rc.trial_id,
         GROUP_CONCAT(vi.label)
FROM     repository_clinicaltrial rc
JOIN     repository_clinicaltrial_i_code rcic ON rcic.clinicaltrial_id = rc.id
JOIN     vocabulary_interventioncode vi ON vi.id = rcic.interventioncode_id 
GROUP BY rc.trial_id
0 голосов
/ 14 марта 2020
select    
rc.trial_id,
(select label from vocabulary_interventioncode where id = (select interventioncode_id from repository_clinicaltrial_i_code where clinicaltrial_id = rc.id limit 1)) as interventioncode
from 
repository_clinicaltrial rc;

Это может быть лучше написано как объединение. Вы можете использовать left join, если хотите показывать испытания без кодов.

select
  rc.trial_id
  vic.label as interventioncode
from repository_clinicaltrial rc
join repository_clinicaltrial_i_code rcic on rcic.clinicaltrial_id = rc.id
join vocabulary_interventioncode vic on vic.id = rcic.interventioncode_id

Вы получите несколько строк для каждого испытания. Мы можем получить одну строку для каждого испытания со всеми кодами вмешательства, объединенными вместе с group_concat.

select
  rc.trial_id
  group_concat(
    distinct vic.label
    order by vic.label
    separator ','
  ) as intervention_codes
from repository_clinicaltrial rc
join repository_clinicaltrial_i_code rcic on rcic.clinicaltrial_id = rc.id
join vocabulary_interventioncode vic on vic.id = rcic.interventioncode_id
group by rc.trial_id
...