我有两个表,
记录错误
在我们存储的记录表中,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 文档 ,但在警告列中它列出了记录存在的所有警告
这个结果是从数据库返回到应用程序,这里我需要的是他们的无论如何,我们可以编写SQL查询,以便它只返回一个记录实例和所有警告列表(如果存在)。 任何人都可以帮忙。
Environment :
spring boot
postgres V10.5
您希望加入警告块,而不是将单个警告加入记录:
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;
这将用分号和空白分隔警告。使用 E'rn'
,如果你想要 CR/LF。或者只是任何其他分隔符。
ARRAY_AGG
STRING_AGG
的替代方法是,前提是你的应用可以处理它。
如果还希望显示没有警告的记录,请使用 LEFT JOIN
而不是 INNER JOIN
。