Столбец выбора Sqlite содержит каждый из идентификаторов - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть таблица

 CREATE TABLE humans_to_pets (
        human_id   INT  NOT NULL,
        pet_id     INT  NOT NULL
    )

, где я храню пары, что у человека есть, какое животное (много ко многим).

По заданному списку pet_id мне нужно найти всех людей, которые владеют каждый питомец из списка.

например

human_id |  pet_id
1           11
2           11
2           12
3           13
4           11
4           12           

find([11,12]) должен вернуть [2, 4]. Только люди 2 и 4 владеют обоими питомцами 11 и 12.

Я использую sqlite 3.31

1 Ответ

1 голос
/ 20 февраля 2020

Вы можете использовать агрегацию и фильтровать с помощью предложения having:

select human_id
from humans_to_pets
where pet_id in (11, 12)
group by human_id
having count(distinct pet_id) = 2

Если предположить, что (pet_id, human_id) кортежи уникальны (что имеет смысл для этой таблицы соединений), это можно упростить до не использовать distinct, что сделает запрос более эффективным:

select human_id
from humans_to_pets
where pet_id in (11, 12)
group by human_id
having count(*) = 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...