sql - 如何基于键值对查询表,其中键是整数,值是整数列表
问题描述
所以,我有一个包含 3 个东西的表:主键、table_id、foreignkey_id 和医生 ID。- table_id 是指具有特定编号的表。- foreignkey_id 指的是该表中的主键。- doctor_id 指的是医生表中的主键 现在,用户将选择他想要使用哪些表以及他想要该表中的哪些项目。我需要所有与组合匹配的医生 ID。
CREATE TABLE tConfidentiality(
confidentiality_id serial primary key,
table_id integer not null,
doctor_id integer not null,
foreignkey_id integer not null,
constraint un_confidentiality unique(table_id, doctor_id, foreignkey_id)
);
INSERT INTO tConfidentiality(table_id, doctor_id, foreignkey_id) values(10, 100, 1000);
INSERT INTO tConfidentiality(table_id, doctor_id, foreignkey_id) values(10, 100, 2800);
INSERT INTO tConfidentiality(table_id, doctor_id, foreignkey_id) values(40, 100, 2000);
INSERT INTO tConfidentiality(table_id, doctor_id, foreignkey_id) values(80, 110, 2500);
INSERT INTO tConfidentiality(table_id, doctor_id, foreignkey_id) values(90, 120, 2800);
查询:必须对值进行参数化
表 10 中的所有医生 ID 为foreignkey_id
1000 和 2800,表 40 中为foreignkey_id
2000
预期结果:100
不要指望你写完整的东西,只要给我指出正确的方向,我就会从那里开始。
解决方案
您需要收集每个 table_id 的外键 id,然后检查是否至少包含您正在寻找的那些。在 Postgres 中,这可以通过将它们聚合成一个数组来完成:
select distinct doctor_id
from tConfidentiality
group by doctor_id, table_id
having table_id = 10 and array_agg(distinct foreignkey_id) @> array[1000,2800]
or table_id = 40 and array_agg(distinct foreignkey_id) @> array[2000];
推荐阅读
- asp.net-mvc - 我无法填充在 asp.net 核心视图中具有多对多关系的标签数据
- jasmine - extjs 上的 Jasmine 单元测试
- java - 使用 HashMap 将整数映射到列表
- php - PhpDocumentor。类类型注解
- android - 如何根据变量的值使底部导航按钮处于非活动状态?
- android - java.lang.IllegalArgumentException:在 Android P 上,类注入只能应用于 BaseDexClassLoader
- javascript - 隐藏复选框的标签 - Yii2
- postgresql - 带有包含返回/换行符的复制语句的 Postgresql 导出结果
- python - 在 pytest 中自动收集匹配几种不同模式的文件名
- java - 无法为应用程序类 com.sun.jersey.api.core.WebAppResourceConfig 添加 Jersey servlet,因为未在其上设置 ApplicationPath 注释