Допустим, у меня есть две таблицы - Персона и Одежда, и обе эти таблицы имеют связанные таблицы «Ключ / Значение», в которых хранятся атрибуты о Персоне и предмете одежды.
Присоединенная версия Person to Attributes может выглядеть следующим образом:
PersonID | AttributeKey | AttributeValue
1 'Age' '20'
1 'Size' 'Large'
2 'Age' '20'
Присоединенная версия одежды для атрибутов может выглядеть следующим образом:
ClothingID | AttributeKey | AttributeValue
99 'Age' '20'
99 'Color' 'Blue'
60 'Age' '20'
Учитывая конкретный предмет одежды, я хочу найти записи человека, которые точно соответствуют ВСЕМ парам атрибутов. Например, учитывая идентификатор одежды 60, я хочу получить ТОЛЬКО PersonID 2, даже если PersonID 1 имел соответствующий ВОЗРАСТ, но у него были дополнительные атрибуты. И в основном обратное имеет тот же эффект.
Учитывая Одежда 99, я не ожидал бы НЕТ результатов, так как ни одна запись Person не имеет атрибута Color.
ВНУТРЕННЕЕ СОЕДИНЕНИЕ, очевидно, дает мне Атрибуты Одежды, которые соответствуют определенным Атрибутам Людей. Но я хочу вернуть только те строки, в которых ВСЕ возможные совпадения действительно совпадали, и выбросить остальные, если они были лишними. OUTER JOIN даст мне значения NULL для тех, которые соответствуют, но как я это обнаружу и выкину все строки Person, если в 1 строке было NULLS?