mysql сравнивает выбранный результат с набором значений - PullRequest
0 голосов
/ 20 марта 2019

у меня есть две таблицы, один содержит person_id и имя person_name вторая таблица содержит и автоинкремент относительный_ид

person_id------person_name
--------------------------
--------------------------

relative_id-----person_id------relative_name
--------------------------------------------
--------------------------------------------
--------------------------------------------

У меня есть набор имен (Адам, Карл, Дейв, ....)

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

enter image description here

1 Ответ

0 голосов
/ 20 марта 2019

Объединение и агрегация:

select p.person_name
from person p inner join
     person_relative pr
     on pr.person_id = p.person_id
where pr.relative_name in ('adam', 'carl', 'dave')
group by p.person_name
having count(*) = 3;

Если у одного человека есть дубликаты родственников, используйте distinct внутри count():

having count(distinct pr.relative_name) = 3;

РЕДАКТИРОВАТЬ: После редактирования вопроса

select p.person_name
from person p inner join
     person_relative pr
     on pr.person_id = p.person_id
group by p.person_name
having sum( pr.relative_name not in ('adam', 'carl', 'dave') ) = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...