我刚刚在我们的代码中遇到了一个错误,该错误基于我们将数据与 Postgres 数组进行匹配的方式。
问题是:
在数据库中,我们有一个 surcharge
列,它位于 appointment
表中,其中存储了与约会相关的所有附加费的 ID。在某些情况下,附加费可能会添加两次,因此在数据库中看起来像 {1,1}
。
我使用如下简单的查询来检索与已附加到预约的附加费相关联的附加费数据:
SELECT s.* FROM surcharge s, appointment a WHERE s.id = ANY(a.surcharges);
不幸的是,我没有测试这种存在多个相同附加费的情况。结果是只返回了 1 条记录,而不是我真正需要的 2 条记录。
为了澄清,一个例子是与 appointment.surcharges = {1,1}
的约会,我实际上希望能够从 surcharges
中检索记录> TWICE,因为它有两个附加费。然后,我使用这些记录来创建与约会相关的计费相关交易。
综上所述,有没有一种简单的方法可以让查询返回我需要的重复项?
我可以在代码中处理这种情况,但运行一个简单的查询来处理这种情况会很棒。
我正在运行 Postgres 9.5。
提前致谢!
最佳答案
我认为一个简单的内部连接到一个未嵌套的附加费表应该给你你想要的:
SELECT s.*
FROM surcharge s
INNER JOIN
(
SELECT UNNEST(surcharges) AS surcharges
FROM appointment
) a
ON s.id = a.surcharges;
关于sql - postgres - 保留查询中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48727733/