Объекты списка MySQL и применение фильтра AND к объединенной таблице - PullRequest
0 голосов
/ 05 января 2019

Есть две таблицы: человек, дом В доме есть личность с именем person_id Дом имеет поле под названием город

Есть ли способ перечислить всех людей с домом как в city_a, так и в city_b? Это должно исключать людей, у которых есть только дома в одном городе, но и людей, у которых есть дома в обоих городах, а также в других городах.

Это мой текущий запрос:

SELECT person.* 
FROM Person person 
JOIN House house ON house.person_id = person.id 
WHERE house.city IN ("city_a", "city_b");

Однако этот запрос возвращает только список людей, у которых есть дома в city_a или city_b, поэтому он не удовлетворяет условию AND.

1 Ответ

0 голосов
/ 05 января 2019

Простой метод использует exists. , , дважды:

select p.*
from person p
where exists (select 1 from house h where h.person_id = p.id and h.city = 'city_a') and
      exists (select 1 from house h where h.person_id = p.id and h.city = 'city_b') ;

Если вы просто хотели идентификаторы этого человека, тогда group by и having удобны:

select h.person_id
from house h
where h.city in ('city_a', 'city_b')
group by h.person_id
having count(distinct h.city) = 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...