我在SQL Server数据库中有两个表:
Table: People
Columns: ID, FirstName, LastName
Table: StandardNames
Columns: Nickname, StandardName
当StandardName为Richard时,示例昵称将为Rick,Rich,Richie。
我想在“人员”表中找到重复的联系人,但是用标准名称替换任何昵称。 IE:有时我有Rich Smith,其他人是People表中的Richard Smith。这可能吗?我意识到可能是同一张表的多个联接,但无法弄清楚如何开始。
答案 0 :(得分:0)
您可以通过加入来标准化名称,并计算出现的次数。提取ID有点麻烦,但也很有可能。我建议采取以下措施-使用case
表达式查找具有标准名称的联系人,如果您没有此名称,则只需获取第一个重复项的ID:
SELECT COALESCE(MIN(CASE FirstName WHEN StandardName THEN id END), MIN(id)),
StandardName,
LastName,
COUNT(*)
FROM People p
LEFT JOIN StandardNames s ON FirstName = Nickname AND
GROUP BY StandardName, LastName
答案 1 :(得分:0)
首先,您需要确定People表中有多少重复项...
SELECT p.FirstName, COUNT(*)
FROM People AS p
INNER JOIN StandardNames AS sn
ON CHARINDEX(sn.Nickname, p.FirstName) > 0 OR
CHARINDEX(sn.Nickname, p.LastName) > 0
GROUP BY p.FirstName
HAVING COUNT(*) > 1
这只是为了了解您要查找的与“姓氏”和“姓氏”列中可能存在的昵称相关的哪些数据(作为通配符搜索)。
如果您对找到的项目感到满意,请在查询上进行扩展以更新值。 假设您想将Firstname更改为Standardname ...
UPDATE p2
SET p2.FirstName = p2.Standardname
FROM
(SELECT p.ID, sn.StandardName
FROM People AS p
INNER JOIN StandardNames AS sn
ON CHARINDEX(sn.Nickname, p.FirstName) > 0 OR
CHARINDEX(sn.Nickname, p.LastName) > 0) AS a
INNER JOIN People AS p2 ON p2.ID = a.ID
因此,这显然会根据上面的查询找到所有具有匹配项的人员ID,并将通过将FirstName替换为StandardName来更新People表。
但是,由于您的问题的限制,与此相关的问题。
祝你好运