【发布时间】:2017-07-16 16:27:34
【问题描述】:
我有两个巨大的数据库表名称“AR”和“All”,我正在尝试将“AR”中的记录匹配到“All”,注意这里我们没有唯一标识符,所以我正在做一个一种模糊匹配,使用名字、姓氏、dob 和 ssn 来获取匹配项。我的匹配查询正在运行。
All 表有一个“MID”列,我想为我的每条匹配记录获取它,但是当我尝试查询时,我得到了数千条记录。我在网上查了很多,但没有弄明白。
我正在尝试从“所有”表中获取第一个匹配的记录以及相应的 MId,用于我的“AR”表中的每条记录。有人可以帮我从这里出去吗。我的查询如下:
Select distinct a.*,
r."MID"
from "public"."AR" a
inner join "public"."All" r
On ( a."cDOB" = r."cDOB"
and right(a."SSN",4) = right(r."SSN",4)
and left(a."Last Name",4) = left(r."LastName",4)
and (a."SSN"!='' or r."SSN"!='')
)
OR
( left(a."First Name",4) = left(r."FirstName",4)
and ( left(a."Last Name",4) = left(r."LastName",4)
OR right(a."Last Name",4) = right(r."LastName",4)
)
and ( right(a."SSN",4) = r."SSN"
OR a."cDOB" = r."cDOB"
)
and ( a."SSN"!=''
OR r."SSN"!=''
)
)
OR
( a."MelID (Original) " = r."Prp"
and a."cDOB" = r."cDOB"
and r."Prp"!=''
);
如果我从第一行删除 r."MID",查询会给我正确的输出,但是当我获取 r."MID" 时,输出记录有很多重复的,什么不是。
【问题讨论】:
-
您忘记提供表定义和 Postgres 版本。一些样本数据和期望的结果也会有很长的路要走。另外,您的描述没有加起来。
All table has a column "MID" which I want to fetch for my every matched record矛盾:trying to get the first matched record from "All" table along with corresponding MId。那么每个匹配的行还是第一行?请说清楚。并定义“第一”。
标签: sql postgresql inner-join greatest-n-per-group