Java 执行连接时的SQL查询varchar连接
我正在编写一个Web服务来查询数据库中的信息并将其放入JSONArray。我有一个名为CLIENT的表和另一个名为CLIENT_NOTES的表,其中包含一个日期和关于客户的注释。一个客户端可以有多个CLIENT_NOTES条目,但反之亦然 所以我的问题是:Java 执行连接时的SQL查询varchar连接,java,mysql,sql,Java,Mysql,Sql,我正在编写一个Web服务来查询数据库中的信息并将其放入JSONArray。我有一个名为CLIENT的表和另一个名为CLIENT_NOTES的表,其中包含一个日期和关于客户的注释。一个客户端可以有多个CLIENT_NOTES条目,但反之亦然 所以我的问题是: SELECT c.CLIENT_NAME, cn.NOTE_DATE, cn.CONTENT FROM CLIENT c LEFT JOIN CLIENT_NOTES cn ON c.C
SELECT c.CLIENT_NAME, cn.NOTE_DATE, cn.CONTENT
FROM CLIENT c
LEFT JOIN CLIENT_NOTES cn ON c.CLIENT_ID = cn.CLIENT_ID
ORDER BY c.CLIENT_NAME
目前,如果每个客户机有多个note条目,我会得到多个行
如何更改查询,使每个客户端始终获得一行,并且注释日期内容列可以组合成一个包含换行符的串联字符串。使用
您可以将结果分组并应用该函数:
SELECT c.CLIENT_NAME,
GROUP_CONCAT(cn.NOTE_DATE SEPARATOR '\n'),
GROUP_CONCAT(DATE_FORMAT(cn.CONTENT, '%d-%m-%y') SEPARATOR '\n')
FROM CLIENT c
LEFT JOIN CLIENT_NOTES cn ON c.CLIENT_ID = cn.CLIENT_ID
GROUP BY c.CLIENT_NAME
ORDER BY c.CLIENT_NAME
您正在使用什么RDBMS?谢谢。我应该提到NOTE_DATE是一个时间戳字段,而不是varchar字段。您的GROUP_CONCAT解决方案在CONTENT varchar字段上运行良好,但分隔符似乎没有在timestamp字段上注册。它会追加,但不会创建新行。有什么建议吗?@WilliamRoberts您可以将日期格式化为字符串-请参阅编辑后的答案
SELECT c.CLIENT_NAME,
GROUP_CONCAT(cn.NOTE_DATE SEPARATOR '\n'),
GROUP_CONCAT(DATE_FORMAT(cn.CONTENT, '%d-%m-%y') SEPARATOR '\n')
FROM CLIENT c
LEFT JOIN CLIENT_NOTES cn ON c.CLIENT_ID = cn.CLIENT_ID
GROUP BY c.CLIENT_NAME
ORDER BY c.CLIENT_NAME