如何为每个用户 ID 向表中插入一行

Hrv*_*e T 0 sql t-sql sql-server

在 MSSQL 中,我有一个codes包含列userid和 的表code。表中有很多行,就像

userid | code 
1      | A
2      | A
3      | B
4      | A
4      | B
Run Code Online (Sandbox Code Playgroud)

我想在代码列中为每个userid没有的代码插入 B。在我的示例中,它适用于用户 ID 1 和 2。

如何动态插入这个?

INSERT INTO 
    codes (userid, code) 
VALUES 
    (1, B), 
    (2, B);
Run Code Online (Sandbox Code Playgroud)

预期结果是:

userid | code 
1      | A
1      | B
2      | A
2      | B
3      | B
4      | A
4      | B
Run Code Online (Sandbox Code Playgroud)

Tim*_*sen 7

我们可以尝试使用以下方法INSERT INTO ... SELECT

INSERT INTO codes (userid, code)
SELECT userid, 'B'
FROM (SELECT DISTINCT userid FROM codes) t
WHERE NOT EXISTS (
    SELECT 1
    FROM codes c
    WHERE c.code = 'B' AND
          c.userid = t.userid
);
Run Code Online (Sandbox Code Playgroud)

别名为 as 的子查询将生成整个表中t所有内容的唯一集合。userid需要某种不同的操作,因为给定的userid代码缺失B可能会在其他代码中多次出现。