我有两个表
记录 错误
在我们要存储的记录表,json文档中以及在错误表中,如果该json的(业务)验证期间,我们存储警告和错误(如果有的话)。
现在我需要实现,就像我们需要发送记录和该记录的警告(如果错误表中的记录存在)
。我编写查询时
SELECT records.record as record,errors.description as warning FROM records as records
INNER JOIN errors as errors
ON records.track_num=errors.track_num
where records.lading_number='123456789'
对于此查询,其结果类型低于
record warning
<<record>> <<warning1>>
<<record>> <<warning2>>
<<record>> <<warning3>>
<<record>> <<warning4>>
<<record>> <<warning5>>
因此,在“记录”列中,它是相同的json文档,但在“警告”列中,它列出了针对该记录的所有警告
此结果从db返回到应用程序,这里我需要的是他们无论如何我们都可以编写sql查询,以便它仅返回一个记录实例和所有警告列表(如果存在)。谁能帮忙。
Environment :
spring boot
postgres V10.5
答案 0 :(得分:0)
您不想将单个警告添加到记录中,而是希望添加警告块:
SELECT r.record, e.warnings
FROM records r
INNER JOIN
(
SELECT track_num, STRING_AGG(description, '; ') AS warnings
FROM errors
GROUP BY track_num
) e ON e.track_num = r.track_num
where r.lading_number = 123456789;
这用分号和空格分隔警告。如果要使用CR / LF,请使用E'\r\n'
。或其他任何分隔符。
STRING_AGG
的替代方法是ARRAY_AGG
,前提是您的应用可以处理它。
如果您还想显示没有警告的记录,请使用LEFT JOIN
代替INNER JOIN
。