SQL Left仅加入第一个匹配
发布时间:2020-05-24 10:24:13 所属栏目:MsSql 来源:互联网
导读:我有一个针对大量连接的大表(行和列)的查询,但是其中一个表有一些重复的数据行导致我的查询出现问题。由于这是来自其他部门的只读实时订阅源,因此我无法修复该数据,但我正在尝试通过它来防止查询中的问题。 鉴于此,我需要将此垃圾数据作为左连接添加到我
|
我有一个针对大量连接的大表(行和列)的查询,但是其中一个表有一些重复的数据行导致我的查询出现问题。由于这是来自其他部门的只读实时订阅源,因此我无法修复该数据,但我正在尝试通过它来防止查询中的问题。 鉴于此,我需要将此垃圾数据作为左连接添加到我的好查询中。数据集如下所示: IDNo FirstName LastName ... ------------------------------------------- uqx bob smith abc john willis ABC john willis aBc john willis WTF jeff bridges sss bill doe ere sally abby wtf jeff bridges ... (约24列,100K行) 我的第一直觉是执行一个独特的给了我大约80K行: SELECT DISTINCT P.IDNo FROM people P 但是,当我尝试以下操作时,我会收到所有行: SELECT DISTINCT P.* FROM people P 要么 SELECT
DISTINCT(P.IDNo) AS IDNoUnq,P.FirstName,P.LastName
...etc.
FROM people P
然后我想我会在所有列上执行FIRST()聚合函数,但是这也感觉不对。从语法上讲,我在这里做错了吗? 更新: 解决方法distinct不是一个功能。它始终在选择列表的所有列上运行。您的问题是典型的“每组最大N”问题,可以使用窗口函数轻松解决: select ... from ( select IDNo,FirstName,LastName,....,row_number() over (partition by lower(idno) order by firstname) as rn from people ) t where rn = 1; 使用order by子句,您可以选择要选择的重复项。 以上可用于左连接: select ...
from x
left join (
select IDNo,row_number() over (partition by lower(idno) order by firstname) as rn
from people
) p on p.idno = x=idno and p.rn = 1
where ... (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- sql – 使用sub select更新 – 如何处理NULL值?
- sql-server – 如何在SQL Server数据库中设计用户
- data.table join with roll =“nearest”返回“搜
- sql-server – 使用DISTINCT作为子查询中的提示有
- Sql Server中REPLACE函数的使用
- SQL Server 将mater库中的系统存储过程批量生成*
- sql – 更改表添加具有默认值和FK的列,该值在FK参
- sql-server – 如何将SQL Server 2005更改为区分
- 删除行时,sql – “字符串或二进制数据将被截断”
- sql – 数据库函数VS Case语句
热点阅读
