如何仅在字段计数等于 1 的情况下回填来自 sql 的数据,同时维护以前连接的记录?

How to back fill data from a sql join only where count of field is equal to 1 while maintaning records from previous joins?

我有两个 table 我可以这样加入:

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

我想在我按电子邮件分组的地方添加第三个 table,以回填上面连接中的数据,但我只想回填电子邮件计数仅为 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。

table 仅来自 LEFT JOIN:

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

table仅 3 个数据

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

所有 tables 加入其中电子邮件只出现一次,应该像这样在左侧加入中回填数据:

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

首先,您的第一个查询在几乎所有数据库中都会 return 出错,因为您将在子查询中有两个同名的列。但是我明白了。

如果我理解正确,这应该可以满足您的要求:

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;

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