Uniqe替换查询

时间:2015-08-08 22:02:32

标签: sql join group-by

我的table1具有完整的姓氏和完整的名字。 我有table2,它有完整的姓氏,只是firstname字段中第一个名字的第一个字母。

我想用table1中的fristname替换table2 firstname。问题是在两个表中都有几个姓氏相同的人。

两个表中的ID都不同,并且不匹配。 有没有办法将table1 firstname与table2 firstname与替换查询相关联?

2 个答案:

答案 0 :(得分:0)

究竟如何做取决于您使用的DBMS,但我认为这样的事情应该可以解决问题。灵感来自this问题的答案。

UPDATE table2
SET table2.firstname = table1.firstname
FROM table1, table2
WHERE
    table1.lastname = table2.lastname AND 
    table1.firstname LIKE CONCAT(table2.firstname, '%')

WHERE条件在table1中找到的匹配项与lastname中的table2相同,而firstname以同一字符串开头。 CONCAT是字符串连接,因此您会得到类似'Bobby' LIKE 'Bob%'的内容。

请注意,如果table2中的一行有多个匹配项(例如,Anna Smith和Anastasia Smith都匹配An ... Smith),则该行将同时更新。最后一个将是坚持的人,但是最后发生的人是随机的。要检查您是否有这样的情况,我认为您可以运行此查询:

SELECT table2.firstname, table2.lastname
FROM table1, table2
WHERE
    table1.lastname = table2.lastname AND 
    table1.firstname LIKE CONCAT(table2.firstname, '%')
GROUP BY table2.firstname, table2.lastname
HAVING COUNT(*) > 1

Disclaimar:我还没有测试过这些。

答案 1 :(得分:0)

首先检查表2中是否有重复的组合:

SELECT lastname, name, count(*)
FROM table2
GROUP BY lastname, name
HAVING count(*) > 1

如果你在table2中没有重复项,那么解决方案很简单,你可以加入这样的表:

... t1.lastname = t2.lastname 
   AND SUBSTRING(t1.name, 1, 1,) = t2.name

由于问题中未指定确切的数据库,因此我在此处跳过完整的UPDATE查询。

如果第一个查询返回重复项,则需要处理这些重复项。如果首先使用适当的名称更新这些记录,则可以运行更新查询,因为它只会影响表2中name为single char的记录。