0

我有两张桌子可以像这样加入:

select * from 
(select * from table1 t1
left join table2 t2 on t1.id = t2.id )

我想添加第三个按电子邮件分组的表,以回填上述联接中的数据,但我只想回填电子邮件计数为 1 的记录的数据。如果不同记录存在重复的电子邮件地址,则应将其排除。

我一直在尝试这个查询:

  select * from 
    (select * from table1 t1
    left join table2 t2 on t1.id = t2.id 
    inner join ((select email from table3 group by email
having count(*) =1) t3
     on t3.email = t1.emailaddress)

此时,当我将电子邮件字段与更大连接中的其他人合并时,我仍然看到记录回填了数据,而电子邮件计数大于 1 被回填。

IE

仅来自 LEFT JOIN 的表:

email      missing_id 
a@a.com 
b@b.com

仅表 3 数据

email       missing_id
a@a.com        1
a@a.com        2
b@b.com        3

在电子邮件仅出现一次的情况下连接的所有表都应回填左连接中的数据,如下所示:

email      missing_id 
a@a.com       
b@b.com        3
4

1 回答 1

1

首先,您的第一个查询将在几乎任何数据库中返回错误,因为您将在子查询中有两个同名的列。但我明白了。

如果我理解正确,这应该做你想要的:

select . . ., t3.id as missing_id
from table1 t1 left join
     table2 t2
     on t1.id = t2.id left join
     (select t3.email, max(t3.id) as id
      from table3 t3
      group by t3.email
      having count(*) = 1
     ) t3
     on t3.email = t1.emailaddress;

这非常接近您的查询,所以我不确定它是否会解决任何问题。

于 2019-06-11T14:02:17.750 回答