我尝试使用group_concat来更快地创建xml outpout。 传统查询的记录号不同。实际上,当我的查询使用group 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
感谢您的帮助
答案 0 :(得分:2)
如the manual中所述:
结果被截断为
group_concat_max_len
系统变量给出的最大长度,该变量的默认值为1024.虽然返回值的有效最大长度受到约束,但可以将该值设置得更高由max_allowed_packet
的值。在运行时更改group_concat_max_len
值的语法如下,其中val
是无符号整数:SET [GLOBAL | SESSION] group_concat_max_len = val;
答案 1 :(得分:0)
您在查询中使用了LEFT JOIN,在另一个中使用了简单的JOIN。这可能会导致不同的结果,因为LEFT JOIN还会考虑在另一个表中没有匹配的记录。
答案 2 :(得分:0)
我找到了解决方案。 的确,如果为null值,则忽略记录,所以我用COALESCE函数来解决这个问题!