0

我尝试使用 group_concat 来更快地创建 xml 输出。记录号与传统查询不同。事实上,当我的查询使用组 concat 时,我的记录较少。

    SELECT GROUP_CONCAT(
    CONCAT('\n<p>\n',  
        CONCAT('\n<id>',paIndex,'</id>\n'),
        CONCAT('<prInitiales>',prInitiales,'</prInitiales>\n'),
        CONCAT('<paNomPren>',paNomPrenom,'\n',ttT_Traitement_P,'</paNomPren>\n'),                                   
        CONCAT('<ttTStatutP>',ttTStatutP,' - ',DATE_FORMAT(ttDateStatut,'%d/%m/%Y'),'\n',ttUserImportant,'</ttTStatutP>\n'),
        CONCAT('<paDossier1>',paDossier1,'\n',paDossier2,'</paDossier1>\n'),
        CONCAT('<paNumTel1>',paNumTel1,'\n',paNumTel2,'</paNumTel1>\n'),
        CONCAT('<paNaissanceS>',DATE_FORMAT(paNaissance,'%d/%m/%Y'),'</paNaissanceS>\n'),
    '</p>') ORDER BY paNomPrenom DESC) AS xml
    FROM 20Patients_1012
    JOIN 30Traitemnt_201223 ON 20Patients_1012.paIndex = 30Traitemnt_201223.ttIndex
    JOIN 12Praticien_02 ON 30Traitemnt_201223.ttPraticien = 12Praticien_02.prIndex

传统查询:

    SELECT 20Patients_1012.paIndex, 20Patients_1012.paNomPrenom, 20Patients_1012.paDossier1, 20Patients_1012.paDossier2, 20Patients_1012.paNaissance, 20Patients_1012.paNumTel1, 30Traitemnt_201223.ttTStatutP, 30Traitemnt_201223.ttDateStatut, 12Praticien_02.prInitiales
FROM 20Patients_1012
JOIN 30Traitemnt_201223 ON 20Patients_1012.paIndex = 30Traitemnt_201223.ttIndex
JOIN 12Praticien_02 ON 30Traitemnt_201223.ttPraticien = 12Praticien_02.prIndex ORDER BY 20Patients_1012.paNomPrenom ASC

感谢您的帮助

4

3 回答 3

2

手册所述:

结果被截断为系统变量给出的最大长度,group_concat_max_len其默认值为 1024。该值可以设置得更高,尽管返回值的有效最大长度受 值的限制max_allowed_packet。在运行时更改 的值的语法group_concat_max_len如下,其中val是一个无符号整数:

设置 [全球 | 会话] group_concat_max_len = val ;
于 2012-06-07T14:43:59.643 回答
0

您在查询中使用了 LEFT JOIN,在另一个查询中使用了简单的 JOIN。这可能会导致不同的结果,因为 LEFT JOIN 还会考虑在另一个表中没有匹配的记录。

于 2012-06-07T14:49:48.333 回答
0

我找到了解决方案。确实,如果 null 值,则忽略记录,所以我使用 COALESCE 函数来解决这个问题!

于 2012-06-08T05:02:28.383 回答