首先,当我开始这个项目看起来很简单。表1中的两个表tbl1_USERMASTERID字段应该从字段tbl2_USERMASTERID表2中更新。在我深入查看表2之后,没有可以用作连接这两个表的唯一ID。匹配表1和表2中的记录的唯一方法是基于FIRST_NAME,LAST_NAME和DOB。所以我必须找到在表1中记录,其中:更新记录SQL?
tbl1_FIRST_NAME equals tbl2_FIRST_NAME
AND
tbl1_LAST_NAME equals tbl2_LAST_NAME
AND
tbl1_DOB equals tbl2_DOB
,然后更新USERMASTERID场。我担心这可能会导致一些重复,并且一些用户将以不属于他们的USERMASTERID结束。因此,如果我根据first,last name和dob查找多条记录,则不会更新这些记录。我想跳过并留空。这样我就不会填充无效的USERMASTERID。我不确定解决这个问题的最佳方法是什么,我应该使用SQL还是ColdFusion(我的服务器端语言)?另外如何检测多个匹配记录?
这是我到目前为止有:
UPDATE Table1 AS tbl1
LEFT OUTER JOIN Table2 AS tbl2
ON tbl1.dob = tbl2.dob
AND tbl1.fname = tbl2.fname
AND tbl1.lname = tbl2.lname
SET tbl1.usermasterid = tbl2.usermasterid
WHERE LTRIM(RTRIM(tbl1.usermasterid)) = ''
这是查询我就开始想检测重复:
SELECT DISTINCT
tbl1.FName,
tbl1.LName,
tbl1.dob,
COUNT(*) AS count
FROM Table1 AS tbl1
LEFT OUTER JOIN Table2 AS tbl2
ON tbl1.dob = tbl2.dob
AND tbl1.FName = tbl2.first
AND tbl1.LName = tbl2.last
WHERE LTRIM(RTRIM(tbl1.usermasterid)) = ''
AND LTRIM(RTRIM(tbl1.first)) <> ''
AND LTRIM(RTRIM(tbl1.last)) <> ''
AND LTRIM(RTRIM(tbl1.dob)) <> ''
GROUP BY tbl1.FName,tbl1.LName,tbl1.dob
一些数据经过笔者测试上面的查询:
First Last DOB Count
John Cook 2008-07-11 2
Kate Witt 2013-06-05 1
Deb Ruis 2016-01-22 1
Mike Bennet 2007-01-15 1
Kristy Cruz 1997-10-20 1
Colin Jones 2011-10-13 1
Kevin Smith 2010-02-24 1
Corey Bruce 2008-04-11 1
Shawn Maiers 2016-08-28 1
Alenn Fitchner 1998-05-17 1
如果有人知道如何防止/跳过更新重复记录或如何改善此查询请让我知道。谢谢。
你可以添加样本数据和预期的结果 –
有选择查询开始。这将使您能够查看将要更新的记录。如果结果看起来不正确,则应用常规故障排除。 –
你可以添加表格模式吗? – McNets