我有一些包含等数据的表
Company
(密码、姓名、地址(Country
(国家ID、名称(
每家公司都在一个国家/地区运营,有一个带有2个外部密钥的表Being
(compid,countryid(。
当前的compid/countryid
属于varchar
类型,因此我需要向company/country
添加一个新的整数密钥
完成后,我想用两个新的整数列更新表'being',比如compid_int
,countryid_int
。
我想将公司和国家的新整数id映射到being
表中的新列中,然后将其设置为外部键。映射将基于以前的varchar
密钥。
如何做到这一点?
UPDATE being
SET being.compid_int = company.compid_int
FROM being, company
WHERE being.compid = company.compid;
UPDATE being
SET being.countryid_int = country.countryid_int
FROM being, country
WHERE being.countryid = country.countryid;
这样行吗?
然后我需要更改外部键并删除所有3个表中的旧列?
您可以在单个UPDATE
语句中使用标准SQL实现所需的结果,如下所示:
UPDATE BEING B
SET B.COMPID_INT = (
SELECT C.COMPID_INT
FROM COMPANY C
WHERE B.COMPID = C.COMPID),
B.COUNTRYID_INT = (
SELECT C.COUNTRYID_INT
FROM COUNTRY C
WHERE B.COUNTRYID = C.COUNTRYID
);