以下两个查询之间有什么区别?
SELECT distinct(Invalid_Emails), [leads_id]
FROM [dbo].[InvalidEmails_stg]
ORDER BY LEADS_ID DESC
vs
select invalid_emails, max(leads_id) as id
from invalidEmails_stg
group by invalid_emails
having count(*) < 2
order by id desc
第二行给我的行少于第一行。
答案 0 :(得分:2)
您对第一个查询中的括号感到困惑。他们什么也没做,所以将查询写为:
SELECT DISTINCT Invalid_Emails, leads_id
FROM [dbo].[InvalidEmails_stg]
ORDER BY LEADS_ID DESC;
这将返回出现在数据库中的所有Invalid_Emails
/ Leads_id
对。无论给定对出现多少次,都会在结果集中恰好出现一次。
此查询:
select invalid_emails, max(leads_id) as id
from invalidEmails_stg
group by invalid_emails
having count(*) < 2
order by id desc;
返回在数据中仅出现一次的invalid_emails
/ leads_id
对。它将滤除出现多次的所有配对。
这是一个简单的例子:
invalid_emails leads_id
a@b.com 1
a@b.com 1
b@c.com 2
b@c.com 3
d@e.com 1
第一个查询将返回:
a@b.com 1
b@c.com 2
b@c.com 3
d@e.com 1
a@b.com
仅返回一次,因为已删除重复项。
第二个将返回:
b@c.com 2
b@c.com 3
d@e.com 1
a@b.com
未返回,因为它出现了两次。
答案 1 :(得分:1)
第一次查询
public ngOnInit() {
this.hero$ = this.store.pipe(select(getSelectedHero));
}
您没有检查约束SELECT distinct(Invalid_Emails),[leads_id]
FROM [dbo].[InvalidEmails_stg]
ORDER BY LEADS_ID DESC
实际上在第二次查询中:
< 2
如果结果包含两行或多于select invalid_emails, max(leads_id) as id
from invalidEmails_stg
group by invalid_emails
having count(*)<2
order by id desc
行,则过滤您的结果。
另一个差异是Having Count(*)
值。如果在第一个查询中显示具有NULL
值的Invalid_Emails列,并在下一个查询中按Null
过滤
答案 2 :(得分:0)
查询具有类似的意图,目的是通过Leads_id获取无效的电子邮件。
第二个查询使用聚合函数仅返回最大Leads_id,并使用hading子句删除重复项。