Postgres получает разные объекты из разных групп в одной модели - PullRequest
0 голосов
/ 31 октября 2019

В настоящее время у меня возникают проблемы с выяснением того, как получить различные объекты, которые существуют в этой группе, с помощью поля, в другую группу с помощью того же поля, но с другим значением. Я использую 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 объекта ReferenceCity с полем name, оба из которых являются Newyork, но каждый имеет разные 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

Я выполнил команду count (*)pgadmin для проверки количества объектов в каждой группе site_id, и я получил 711 объектов из site_id = 1 и 709 из site_id = 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

Как выбрать «Получить Детройт и Чикаго»from site_id = 2 Рад, если кто-то может помочь:)

1 Ответ

1 голос
/ 31 октября 2019

Вы можете использовать предложение 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)

...