【发布时间】:2014-09-30 07:54:35
【问题描述】:
我有一个类似的查询
SELECT E1.name,E1.id from E1
union all
SELECT E2.name,E2.id from E2
对于给定的 name 和 id 的唯一组合,E1 和 E2 都有多个记录(假设同一个人有两个不同的电话号码,因此 E1.phone 对于具有相同 E1.name 和 E1.id 的两行是不同的)。因此,我的查询输出中有许多重复记录
我想要来自上述查询的一组唯一行。我知道我可以在查询顶部使用“DISTINCT”子句,例如:
SELECT distinct name,id
from
(SELECT E1.name,E1.id from E1
union all
SELECT E2.name,E2.id from E2);
但据我所知,Distinct 有性能开销。 有没有其他方法可以更有效地实现一组唯一记录? 现在,我想不出任何,除了使用
row_number() over partition by (name, id order by name)
但是使用row_number() 是否比DISTINCT 更有效?
还有其他我想念的方式吗?
【问题讨论】: