SQL попытка использовать столбец из объединенной таблицы в подзапросе - PullRequest
1 голос
/ 29 мая 2020

Вот то, что у меня сейчас есть, которое возвращает 3 столбца для пациента_id, group_concat_1 и group_concat_2:

SELECT patient_id,
(SELECT GROUP_CONCAT(column1) FROM 
table1 where patient_id = patient.id
) group_concat_1,
(SELECT GROUP_CONCAT(column1) FROM 
table2 where patient_id = patient.id
) group_concat_2
FROM patient

Однако мне нужно вернуть один столбец с объединенными group_concat_1 и group_concat_2, поэтому я попробовал это:

SELECT patient_id,
SELECT CONCAT(group_concat_1, group_concat_2) FROM (
    (SELECT GROUP_CONCAT(column1) FROM 
    table1 where patient_id = patient.id
    ) group_concat_1,
    (SELECT GROUP_CONCAT(column1) FROM 
    table2 where patient_id = patient.id
    ) group_concat_2 
)
FROM patient

Но его явно не работает, так как теперь он не может найти Patient.id во внутреннем подзапросе. Любой совет? Спасибо!

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Вы можете напрямую объединить 2 столбца:

SELECT p.patient_id,
  CONCAT(  
    (SELECT GROUP_CONCAT(column1) FROM table1 where patient_id = p.patient.id),
    (SELECT GROUP_CONCAT(column1) FROM table2 where patient_id = p.patient.id)
  )
FROM patient p
0 голосов
/ 29 мая 2020

Я почти уверен, что вы хотите concat_ws() для этой цели:

SELECT patient_id,
       CONCAT_WS(','
                 (SELECT GROUP_CONCAT(t1.column1) FROM table1 t1 where t1.patient_id = p.id
                 ),
                 (SELECT GROUP_CONCAT(t2.column1) FROM table2 t2 where t2.patient_id = p.id
                 ) 
                ) as combined
FROM patient p;

Есть две причины:

  1. Вы можете различать guish между последний элемент из table1 и первый из `table2.
  2. Если в одной из таблиц нет совпадающих значений, это возвращает результаты из другой.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...