sql - 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。
解决方案
您应该修复您的数据模型。以下是一些原因:
- 将数字存储在字符串中是不好的。
- 在一个字符串中存储多个值是不好的。
- SQL 的字符串处理能力很差。
- Postgres 提供了许多存储多个值的方法——想到联结表、数组和 JSON。
对于您的特定问题,显式比较如何?
where status in ('1', '18', '1,18', '18,1')
推荐阅读
- javascript - 使用 ReactHooks 在 React.State/LocalStorage 中保存数据(对象数组)时,遇到错误
- javascript - 有没有办法正确搜索一个对象并用 ES6 替换它的值?
- excel - 如何将多列excel表格转换为附有标题的单列
- java - 在不更改类型的情况下在日期字段中发送没有“Z”的 xml 请求
- javascript - 表头上的自定义排序和功能
- python - Dask:合并后写入 csv 非常慢(python)
- reactjs - 什么是 useState 第二个参数?为什么我有“不是函数”错误
- java - Spring Boot kafka 消费者,未触发的两个侦听器之一
- java - 如何使用 java 自定义序列化此测试类以平面结构(未包装的 XYZ 类)的形式获取输出
- reactjs - 在 Jest / jsdom / React 测试库中触发键盘事件未按预期工作