我有两个表,Table1
和Table2
。
Table1
由FullName
格式的名称列('FirstName LastName'
)和唯一标识符(Key
)组成。 Table2
有一个列(Name
)由这些名称组成,但格式为'F. LastName'
。
我想用Table2
中的唯一标识符Key
替换Table1
中的名称。这需要比较FullName
和Name
中的字符串(此比较是双射的)。
这可以使用SQL吗?
答案 0 :(得分:2)
您可以直接进行更新,但是您遇到了无法克服的问题。
create table table1 (
key integer primary key,
firstname varchar(20),
lastname varchar(20)
);
insert into "table1" values(1,'Ian','McCormick');
insert into "table1" values(2,'Irving','McCormick');
create table table2 (name varchar(30));
insert into table2 values('I. McCormick');
看到问题? 'Ian McCormick'和'Irving McCormick'都映射到'I.麦考密克”。应该使用哪个ID号码。麦考密克结束了吗?没有办法说出来。
无论如何,请仔细更新。备份数据库。然后为id号添加一个新列。
alter table Table2
add column key integer;
现在,您可以更新新列,而不会冒旧列中的数据。
update table2
set key = (select key
from table1
where name = substr(FirstName, 1, 1) || '. ' || LastName);
您也可以加入表达式。加入你打算在更新中使用的表达是一个很好的第一步 - 它可以在为时已晚之前提醒你问题。此外,如下所示,它可以显示可能由不良数据导致的大屠杀。
sqlite> select * from table1
...> inner join table2
...> on substr(FirstName, 1, 1) || '. ' || LastName = table2.name;
key firstname lastname name key
--
1 Ian McCormick I. McCormick 1
2 Irving McCormick I. McCormick 1
请注意第二行中键的不匹配。