Postgres 从同一模型中的不同组中获取不同的对象

Postgres get the different objects from different group in the same model

我目前无法弄清楚如何通过一个字段将存在于该组中的不同对象通过相同字段但不同值获取到另一个组。 我正在使用 sqlalchemy 将我的烧瓶连接到 postgresql 我有这样的 ReferenceCity 模型:

class ReferenceCity(Base):
    __tablename__ = 'reference_cities'
    id = Column(Integer, primary_key=True)
    site_id = Column(Integer, ForeignKey('sites.id'), nullable=False)
    name = Column(String)

基本上,ReferenceCity 将有 2 个分组 site_id。例如 site_id =1 和 site_id = 2

名称字段可以重复,例如:可以有 2 个带有 name 字段的 ReferenceCity 对象都是纽约,但每个对象都有不同的 site_id.

SELECT count(*)
    FROM public.reference_cities
    WHERE site_id=1;
//got 711

SELECT count(*)
    FROM public.reference_cities
    WHERE site_id=2;
//got 709

我在 pgadmin 上执行了 count(*) 命令来检查每组 site_id 中的对象数量,我从 site_id = 1 中得到了 711 个对象,从 [=29= 中得到了 709 个对象] = 2 .

所以肯定有 2 个城市是其他组没有的,我正试图找到一个 SELECT 查询来找到那些丢失的 2 个城市,但我还找不到。

示例数据:

ReferenceCity table
id name        site_id
1  newyork     1
2  california  1
3  texas       1    
4  newyork     2
5  california  2
6  texas       2
7  detroit     2
8  chicago     2

我如何 select 从 site_id=2 得到底特律和芝加哥 很高兴有人能提供帮助:)

您可以使用 EXCEPT 子句来隔离额外的行:

SELECT name
FROM reference_cities
WHERE site_id = 2

EXCEPT

SELECT name
FROM reference_cities
WHERE site_id = 1;

输出:

postgres=# create table reference_cities (id int, name text, site_id int);
CREATE TABLE
postgres=# insert into reference_cities values (1,'newyork',1),(2,'california',1),(3,'texas',1),(4,'newyork',2),(5,'california',2),(6,'texas',2),(7,'detroit',2),(8,'chicago',2);
INSERT 0 8
postgres=# SELECT name
FROM reference_cities
WHERE site_id = 2
EXCEPT
SELECT name
FROM reference_cities
WHERE site_id = 1;
  name   
---------
 chicago
 detroit
(2 rows)

披露:我为 EnterpriseDB (EDB)

工作