У меня есть три таблицы (ради аргумента), индивидуальные, электронные письма и атрибуты. individual_Ref внешний ключ, который связывает человека с электронной почтой и атрибутом.Не понимаю, почему эти два запроса дают разные результаты.
Не обязательно, чтобы данный индивид представлялся в таблице атрибутов, поскольку у них, возможно, никогда не было добавленного атрибута, и они могут появляться более одного раза, если они имеют более одного атрибута.
Я хочу получить список отдельных ссылок и счетчик определенного атрибута для них. Но нужно искать по адресу электронной почты, как это разрешено для людей, чтобы разделить адреса электронной почты (не поймите меня начали) ...
Мой первый удар был
select e.individual_ref, count(a.attr_Code_ref)
from email e left join attribute a on e.individual_Ref = a.individual_ref
where e.email_Address = '[email protected]'
and a.attr_code_Ref = 4119
group by e.individual_ref
с использованием соединения слева, чтобы обеспечить I получить индивидуальный адрес электронной почты, если таковой существует, и убедиться, что я получаю результат, если есть индивидуальный адрес электронной почты, но не атрибут. Или я так думал, так как это не возвращает ни одной строки, но ...
select e.individual_ref,
(select count(a.attr_Code_ref) from attribute a where a.attr_code_Ref = 4119 and a.individual_ref = e.individual_ref)
from email e
where e.email_Address = '[email protected]'
group by e.individual_REf
возвращает один ряд с individual_Ref и подсчет 0
Я не предлагаю SQL сломана более, что мое понимание .. поэтому я думаю, «каково мое замешательство?» это вопрос.
+1 для получения людей, чтобы рассмотреть эффект предложение WHERE в контексте JOIN –
благодарит за ответы! –