sql - postgres - 保留查询中的重复项

标签 sql postgresql

我刚刚在我们的代码中遇到了一个错误,该错误基于我们将数据与 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/

相关文章:

mysql - 如何执行受同一个表中的值限制的 mysql 查询?

python - 如何使用 pgdb.executemany?

ruby-on-rails - 使用 postgres 数组的 Rails OR 查询

postgresql - 转到 time.Time 到 postgresql timestamptz 无法使用 time.Now() 保存

database - 始终使用序列列中的下一个序列(不允许用户值)

SQL 多个共享 WHERE 条件

sql - 如何在 SQL Server 2008 中选择或之前创建触发器

mysql - 按日期分组并计数

MySQL设置root密码错误

python - SQL 数据库中查询的多线程