首页 > 解决方案 > SQL查询(Postgres)如何回答?

问题描述

我有一个带有公司 ID(非唯一)和一些属性(我们称之为状态 ID)的表,状态可以在 1 到 18 之间(多对多的行 ID 是唯一的)现在我需要获得仅有 1 和 18 的行,如果它们也有任何数字(比如说 3),那么这家公司不应该被退回。数据存储为行 ID、一些元数据、公司 ID 和一个状态 ID,下面的示例是在我按查询运行组之后。

例如,如果我进行分组和字符串 agg,我会得到这些值:

Company ID Status
1           1,9,12,18
2           12,13,18
3           1
4           8
5           18

所以在这种情况下,我只需要返回 3 和 5。

标签: sqlpostgresql

解决方案


您应该修复您的数据模型。以下是一些原因:

  • 将数字存储在字符串中是不好的。
  • 在一个字符串中存储多个值是不好的。
  • SQL 的字符串处理能力很差。
  • Postgres 提供了许多存储多个值的方法——想到联结表、数组和 JSON。

对于您的特定问题,显式比较如何?

where status in ('1', '18', '1,18', '18,1')

推荐阅读