我的table1具有完整的姓氏和完整的名字。 我有table2,它有完整的姓氏,只是firstname字段中第一个名字的第一个字母。
我想用table1中的fristname替换table2 firstname。问题是在两个表中都有几个姓氏相同的人。
两个表中的ID都不同,并且不匹配。 有没有办法将table1 firstname与table2 firstname与替换查询相关联?
答案 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的记录。