SQL试图在子查询中使用联接表中的列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL试图在子查询中使用联接表中的列相关的知识,希望对你有一定的参考价值。
这是我目前拥有的内容,它返回3列Patient_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。有什么建议吗?谢谢!
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
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;
有两个原因:您可以区分
table1
中的最后一个元素和`table2中的第一个元素。- 如果其中一个表没有匹配值,则返回另一个表的结果。
我还要补充一点,您的原始查询将在大多数数据库中运行。 mysql和Oracle碰巧是两个不理解嵌套相关子句的。
以上是关于SQL试图在子查询中使用联接表中的列的主要内容,如果未能解决你的问题,请参考以下文章