我有三个表(为了争论)个人、电子邮件和属性。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 = 'example.email@adomain.net'
and a.attr_code_Ref = 4119
group by e.individual_ref
使用左连接来确保我从电子邮件中获得个人参考(如果存在),并确保如果电子邮件中有个人参考但属性中没有个人参考,我会得到结果。或者我认为因为这不会返回任何行但是......
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 = 'example.email@adomain.net'
group by e.individual_REf
返回一个带有 individual_Ref 且计数为 0 的行
我并不是说 SQL 比我的理解更糟糕……所以我猜“我的困惑是什么?” 是问题。