首页 > 解决方案 > 查找包含所提供资源的所有人员

问题描述

以下是表格:

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。

标签: sqlpostgresql

解决方案


您可以使用聚合:

select pr.personid
from pr 
where pr.resourceid in ('ABC', 'DEF')
group by pr.personid
having count(*) = 2;

上的主键pr可防止重复,因此count(*)可确保将两种资源都分配给人员。


推荐阅读