我有一个表(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
Run Code Online (Sandbox Code Playgroud)
我需要两次出现的记录,并且FIID的1行是空的,而其中一行不是.对于上述数据,只有"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
)
Run Code Online (Sandbox Code Playgroud)
然而,花了近10分钟才能完成1000万条记录.有一个更好的方法吗?我知道我必须在这里做一些愚蠢的事情.
谢谢
我会尝试这个查询:
SELECT EMail, MAX(FFID)
FROM TestFI
GROUP BY EMail
HAVING COUNT(*)=2 AND COUNT(FIID)=1
Run Code Online (Sandbox Code Playgroud)
它将返回EMail列,以及FFID的非null值.FFID的另一个值为null.
| 归档时间: |
|
| 查看次数: |
977 次 |
| 最近记录: |