Представьте, что у вас есть две таблицы с отношениями один ко многим.
В этом примере я предлагаю две таблицы: Персона и Дома.Таблица персон содержит имена людей и дает им идентификатор.Стол домов, содержит ассоциацию домов с человеком.PID присоединяется к «Person.ID»
И в этой крошечной БД у человека может не быть домов или много домов.
Я надеюсь, что нарисовал это правильно.
Как мне написать выборку, которая возвращает всех с каждый указанным типом дома?
Допустим, это действительные «Типы» в таблице домов:
Коттедж, Главная, Особняк, Космодром.
Я хочу вернуть всех, в таблице Person, у которых есть космодром и Коттедж.
Лучшее, что я мог придумать, было следующее:
SELECT DISTINCT( p.name ) AS name
FROM person p
INNER JOIN homes h ON h.pid = p.id
WHERE 'spaceport' in (
SELECT DISTINCT( type ) AS type
FROM homes
WHERE pid = p.id
)
AND 'cottage' in (
SELECT DISTINCT( type ) AS type
FROM homes
WHERE pid = p.id
)
Когда я написал это, это работает, но я почти уверен, что должен быть лучший способ.