postgre如何使用SQL从DB获取一条记录并获取该记录的所有警告



我有两个表,

记录错误

在我们存储的

记录表中,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

最新更新