例如,我有一个包含以下数据的表(TestFI)
FIID Email
---------
null a@a.com
1 a@a.com
null b@b.com
2 b@b.com
3 c@c.com
4 c@c.com
5 c@c.com
null d@d.com
null d@d.com
我需要恰好出现两次的记录,并且有 1 行 FIID 为空,而另一行则不是。对于上面的数据,只有“a@a.com 和 b@b.com”符合要求。
我能够像这样构建一个多级查询
Select
FIID,
Email
from
TestFI
where
Email in
(
Select
Email
from
(
Select
Email
from
TestFI
where
Email in
(
select
Email
from
TestFI
where
FIID is null or FIID is not null
group by Email
having
count(Email) = 2
)
and
FIID is null
)as Temp1
group by Email
having count(Email) = 1
)
然而,1000 万条记录用了将近 10 分钟。有一个更好的方法吗?我知道我必须在这里做一些愚蠢的事情。
谢谢