加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL INSERT INTO WITH SELECT查询

发布时间:2020-12-12 07:26:16 所属栏目:MsSql教程 来源:网络整理
导读:没有经验的SQL,我希望有人可以帮助我. 我有一个空的临时表,以及一个包含信息的表. 我的查询概要如下: CREATE TABLE [#Temp] (ID Int,Field1 Varchar)INSERT INTO [#Temp] SELECT ID,Field1 FROM [Other_table] WHERE ID IN (ID1,ID2,ID3...) 所以我将一大堆I
没有经验的SQL,我希望有人可以帮助我.

我有一个空的临时表,以及一个包含信息的表.

我的查询概要如下:

CREATE TABLE [#Temp] (ID Int,Field1 Varchar)

INSERT INTO [#Temp]
    SELECT ID,Field1 
    FROM [Other_table] 
    WHERE ID IN (ID1,ID2,ID3...)

所以我将一大堆ID传递给查询,并且ID对应于Other_table中的ID,它必须使用此信息填充临时表.

是否可以在同一查询中保存与其他位置不匹配的ID(比如另一个临时表)?或者对于相同的临时表,在这种情况下只有Field1 = NULL?

我需要对未匹配的ID做额外的工作,所以我需要在某处随时访问它们.我希望在这一个查询中完成所有操作,如果这是最快的方法.

编辑:

谢谢你的帮助.

道歉,我现在看到我的问题并不完全清楚.

如果Other_table包含ID 1 – 1000,并且我传入了ID 999,1000和1001,我希望临时表包含999和1000的信息,然后是ID为1001且Field1 = NULL的条目.我不希望ID 1 – 998与Field1 = NULL一起返回.

解决方法

每个insert语句只能使用一个目标表.因此,将field1保持为null似乎是最简单的方法:
INSERT INTO [#Temp]
SELECT ID,CASE WHEN ID IN (ID1,ID3...) THEN Field1 END
FROM [Other_table]

case语句将返回null id,ID不在列表中.

更新
更新问题后,我建议这样做:
首先,将您在in运算符中使用的ID列表插入另一个临时表:

create table #tempIDs (id int)
insert into #tempIDs values(id1),(id2),(id3),....

然后只使用一个简单的左连接:

INSERT INTO [#Temp]
SELECT t1.ID,Field1 
FROM #tempIDs t1 
LEFT JOIN [Other_table] t2 ON(t1.id = t2.id)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读