我必须把一些数据导出到excel文件。这些数据来自一个名为“tb\u forms”的表,在另一个名为“tb\u movement”的表中具有多重关系,如下所示
+----------+---------------------+
| tb_Forms | |
+----------+---------------------+
| FormsId | Description |
| 1 | "form 1" |
| 2 | "form 2" |
| 3 | "form 3" |
+----------+---------------------+
+-----------------+---------------+-------------------+--------------+--------+-----------------------+
| tb_Movement | | | | | |
+-----------------+---------------+-------------------+--------------+--------+-----------------------+
| MovementId | FirstAnswer | SecondAnswer | ResponseDate | UserFk | FormsFk |
| 1 | "Lorem Ipsum" | "dolor sit amet" | 2018-07-31 | 1 | 1 |
| 2 | "consectetur" | "adipiscing elit" | 2018-08-01 | 2 | 1 |
+-----------------+---------------+-------------------+--------------+--------+-----------------------+
+----------+---------------------+
| tb_Users | |
+----------+---------------------+
| UserId | Name |
| 1 | João Silva |
| 2 | Maria Oliveira |
+----------+---------------------+
我想找到一种方法得到两个结果,比如:
Result
First Remark: "Lorem Ipsum",
Second Remark: "dolor sit amet" in 2018-07-31 by João Silva
First Remark: "consectetur",
Second Remark: "adipiscing elit" in 2018-08-01 by Maria Oliveira
但我只能得到第一个结果ã哦,席尔瓦)没有别的了。以下是我提出的问题:
SELECT GROUP_CONCAT(CONCAT(
"First Remark: ", mv.FirstRemark,
"\rSecond Remark: ", mv.SecondRemark,
"\rin ", mv.ResponseDate, " by ",
(SELECT Name FROM tb_Users WHERE UserId = mv.UserFk)
) SEPARATOR ',')
FROM tb_Movement mv
WHERE mv.FormsFk = 1;
我已经试过了:
SET SESSION group_concat_max_len = 1000000;
…因为备注字段可能非常大,但这似乎不是解决方案。
我必须这样写所有答案,因为每个表格行在excel中也必须是唯一的一行。
1条答案
按热度按时间kcwpcxri1#
我建议:
笔记:
sql中的标准字符串分隔符是单引号。
GROUP_CONCAT()
处理多个参数,所以CONCAT()
没有必要。你需要使用
JOIN
. 在聚合查询中使用相关子查询可能会产生意外结果或错误——这两者都不可取。一
LEFT JOIN
更接近你的意图,所以NULL
不会筛选出外键引用。