sql - 查找包含所提供资源的所有人员
问题描述
以下是表格:
CREATE TABLE Person(
PersonID INT PRIMARY KEY,
FirstName VARCHAR(10),
LastName VARCHAR(10));
CREATE TABLE Resources(
ResourceID CHAR(3) PRIMARY KEY
);
CREATE TABLE PR (
PersonID INT,
ResourceID CHAR(3),
CONSTRAINT pkpr PRIMARY KEY (PersonID, ResourceID),
CONSTRAINT fkPersonID FOREIGN KEY (PersonID) REFERENCES Person(PersonID),
CONSTRAINT fkResourceID FOREIGN KEY (ResourceID) REFERENCES Resources(ResourceID));
INSERT INTO Person(PersonID, FirstName, LastName) VALUES (1, 'Bill', 'Smith'),(2, 'John','Jones');
INSERT INTO Resources (ResourceID) VALUES ('ABC'),('DEF'),('HIJ');
INSERT INTO PR (PersonID, ResourceID) VALUES (1,'ABC'),(1,'DEF'),(2,'ABC'), (2,'HIJ'), (1,'HIJ');
如何找到所有拥有资源的人('ABC','DEF')?
使用上面插入的数据,它应该返回人比尔史密斯
我正在使用 PostgreSql。
解决方案
您可以使用聚合:
select pr.personid
from pr
where pr.resourceid in ('ABC', 'DEF')
group by pr.personid
having count(*) = 2;
上的主键pr
可防止重复,因此count(*)
可确保将两种资源都分配给人员。
推荐阅读
- python - Keras predict_classes 方法返回“列表索引超出范围”错误
- node.js - require('..') 是什么意思?
- terraform - Terraform:引用或未引用的资源引用?
- java - 连接 Stomp over SockJS 并订阅消息后仅接收标头
- php - 如何解决:当我编写测试时“未找到测试”?
- node.js - 将 mongoose-autoincrement 与 insertMany 请求一起使用会以无序的方式填充 _id 索引
- entity-framework-core - 已存在同名查询类型
- python - 根据其他列值的组合检查唯一列值
- c# - Vector 3 数组,如何将位置分配给 Vector3 数组
- numpy - 如何将矩阵提升到按升序增加的数组中元素的幂?