SQL试图在子查询中使用联接表中的列

问题描述 投票:0回答:2

这是我目前拥有的内容,它返回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。有什么建议吗?谢谢!

mysql sql
2个回答
0
投票
您可以直接连接两列:

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
投票
我很确定您为此目的想要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中的第一个元素。
  1. 如果其中一个表没有匹配值,则返回另一个表的结果。
  • 还请注意,我添加了表别名和限定的列名。当处理具有多个表引用的查询时,这非常重要-它有助于防止某些很难调试的错误。

    我还要补充一点,您的原始查询将在大多数数据库中运行。 MySQL和Oracle碰巧是两个不理解嵌套相关子句的。

  • © www.soinside.com 2019 - 2024. All rights reserved.