没有经验的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)
原文地址:https://www.jb51.cc/mssql/76873.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。