在 MSSQL 中,我有一個codes包含列userid和code. 表中有很多行已經喜歡
userid | code
1 | A
2 | A
3 | B
4 | A
4 | B
我想在每個userid沒有它的代碼列中插入 B。在我的示例中,它將用于用戶 ID 1 和 2。
如何動態插入這個?
INSERT INTO
codes (userid, code)
VALUES
(1, B),
(2, B);
預期結果是:
userid | code
1 | A
1 | B
2 | A
2 | B
3 | B
4 | A
4 | B
uj5u.com熱心網友回復:
我們可以嘗試使用以下內容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
);
別名為 as 的子查詢將在整個表中t生成唯一的所有集合。userid需要某種不同的操作,因為給定userid的代碼缺失B可能會在其他代碼中出現不止一次。
uj5u.com熱心網友回復:
您可以使用 EXCEPT 運算子:
INSERT INTO dbo.codes (userid,code)
SELECT DISTINCT userid, 'B' as code
FROM dbo.codes
EXCEPT
SELECT userid,code
FROM dbo.codes
WHERE code='B';
uj5u.com熱心網友回復:
雖然此答案在邏輯上等同于WHERE NOT EXISTS 答案,但您應該支持該答案,因為LEFT JOIN 在非平凡情況下可能表現出較差的性能。
INSERT [codes]
SELECT
L.[userid],
'B'
FROM
[codes] L
LEFT JOIN
[codes] R
ON R.[userid] = L.[userid] AND R.[code] = 'B'
WHERE
[R].[userid] IS NULL;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/504180.html
