arrays - where子句包含数组列时如何选择匹配的记录?
问题描述
在一个项目中,我有一个表documents
,我必须从中选择所有记录,documents.id
因为我有一个documents.recipients
.
我需要的结果记录是:
文档 ID | 处方ID |
---|---|
1 | gmiG_duuBQOX6WblPXpUk |
1 | TQ7o1lBsrfDPtBeqGnyYt |
2 | gmiG_duuBQOX6WblPXpUk |
2 | TQ7o1lBsrfDPtBeqGnyYt |
问题是您从表格屏幕截图中看到收件人是一个数组,我不知道如何进行这种匹配。
该文档可以有多个收件人,而不仅仅是这个虚拟表中显示的 2 个,我必须将所有文档与一个收件人 ID 匹配。
例如[{r1,d1},{r1,d2},{r2,d3}]
结果我需要能够在 API 中构造一个有效负载,我必须在其中发送一个 OBJ,例如
{
"phone": null,
"email": "foo@bar.com",
"recipients": [{r1,d1},{r1,d2},{r2,d3}]
}
但是,上面的OBJ只是为了信息竞争而添加的。我需要的帮助是构建一个 PostgreSQL 查询,该查询可以导致我之前描述的内容,并解决我与收件人之间的问题是一个数组。
我一直在尝试如下但并不真正了解如何做到这一点:
select
id,
recipients
from
documents d
where
recipients -> '0' = 'gmiG_duuBQOX6WblPXpUk'
编辑添加了此表属性的屏幕截图
解决方案
使用jsonb
包含运算符@>
查找收件人包含某个收件人的所有行:
SELECT d.id, 'gmiG_duuBQOX6WblPXpUk'
FROM documents d
WHERE d.recipients @> ARRAY['gmiG_duuBQOX6WblPXpUk'];
推荐阅读
- ios - 如何在不使用 WebView 和 NSAttributString 的情况下呈现 HTML 字符串,就像在 Gmail 线程中一样。(iOS+Swift)
- php - Drush cim 命令在 Windows 机器上导致 PHP 致命错误
- excel - 过滤后,如何选择和删除Excel中的可见行?
- python - 如何按升序(按中值)对箱线图值进行排序?
- java - 口袋妖怪敌人随机发生器
- karate - 我们可以一次性在 karate-config.js 文件中设置的所有环境中运行空手道脚本吗
- spring - Thymeleaf 显示元素在使用布局时处于活动状态
- php - 正则表达式只返回某些值 PHP
- php - Symfony - 查询总和
- assembly - 动态监控 rdtsc 的性能