gpt4 book ai didi

sql - 如何在 T-SQL 中插入另一个表中的列?

转载 作者:行者123 更新时间:2023-12-04 16:37:26 25 4
gpt4 key购买 nike

我有两个表需要合并而不创建新的 View /表。基本上,我只需要将一列添加到从另一个表中获取的现有表中。

table1 看起来像这样:
enter image description here

table2 看起来像这样:
enter image description here

我需要一个看起来像 table2 但有一个附加列的表:programs_total。如果第一列中没有这样的 id,我希望第二列有 NULL。在此示例中,我希望 id=72_200 的原始数据在 programs_total 列中具有 NULL

我尝试了以下脚本:

-- adding a new column 
ALTER TABLE table2
ADD programs_total BIGINT NULL;

-- inserting new data
INSERT INTO table2 (programs_total)
SELECT programs_total
FROM table1

但它会产生以下错误:

Msg 515, Level 16, State 2, Line 4
Cannot insert the value NULL into column 'id', table 'stb.dbo.table2'; column does not allow nulls. INSERT fails.
The statement has been terminated.

我想它会尝试插入三个新行,而不是将列与现有的列连接起来。我如何告诉它将该列连接到现有行?

或者我做错了什么?

最佳答案

看起来像您真正想要的UPDATE:

UPDATE t2
SET t2.total_programs = t1.total_programs
FROM dbo.table2 t2
JOIN dbo.table1 t1 ON t2.id = t1.id;

但是,如果 table1 中的 id 值未出现在 table2 中,并且您想插入这些值进入 table2 以及你需要一个 MERGE:

MERGE dbo.Table2 AS T2
USING dbo.TAble1 AS T1 ON T2.id = T1.id
WHEN MATCHED THEN
UPDATE
SET total_programs = t1.total_programs
WHEN NOT MATCHED THEN
INSERT (id,total_programs)
VALUES(T1.id,T1.total_programs);

或者你可以把它写成一个 Upsert,如下所示:

UPDATE t2
SET t2.total_programs = t1.total_programs
FROM dbo.table2 t2
JOIN dbo.table1 t1 ON t2.id = t1.id;

INSERT INTO dbo.Table2(id,total_programs)
SELECT t1.id,
t1.total_programs
FROM dbo.Table1 t1
WHERE NOT EXISTS (SELECT 1
FROM dbo.Table2 t2
WHERE t2.id = t1.id);

关于sql - 如何在 T-SQL 中插入另一个表中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67971276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com