在转换值以匹配第三个 table 时使用 Insert Into Select

Using Insert Into Select while converting values to match a third table

我不知道如何简单地表达我的问题,但情况是这样的。我有两个 tables,数据如下:

证书状态Table:

CertStatus_KEY  CertStatus_ID
1               ACTIVE
2               EXPIRED

证书导入Table:

Status
ACTIVE
EXPIRED
EXPIRED
ACTIVE
EXPIRED
ACTIVE

我需要做的是获取 CertImport.Status 列,将所有这些状态转换为与 CertStatus_ID 匹配的 CertStatus_KEY,然后将所有这些信息复制到第三个 table 有两列,因此数据最终如下所示。

认证Table:

Certification_KEY   CertStatus_KEY
1                   1
2                   2
3                   2
4                   1
5                   2
6                   1

我正在尝试使用 Insert Into Select 语句,但我收到一条错误消息,指出子查询返回了超过 1 个值。这是我得到的:

INSERT INTO Certification (CertStatus_KEY)
SELECT (
    SELECT CertStatus_KEY from CertStatus where CertStatus_ID in (
        SELECT Status from CertImport)
    )

简化,目标是将CertImport.Status转换为匹配CertStatus.CertStatus_ID对应的CertStatus.CertStatus_KEY值,然后将该值插入Certification.CertStatus_KEY。

谢谢。

Insert into Certification (CertStatus_Key)
select cs.Certstatus_Key
from CertStatus cs
inner join CertImport ci on cs.CertStatus_Id = ci.Status;

DBFiddle demo

注意:在 SQL 服务器中,无法保证结果 return 与 select 的顺序,除非指定了 order by 子句(或者至少有聚集索引)。对于像这样的小数据集,您会得到您要求的结果,但对于更大的数据集,则无法保证。实际上,设计似乎从一开始就很糟糕,CertImport 应该有一个 ID 列?