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)
我们可以尝试使用以下方法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可能会在其他代码中多次出现。