使用SELECT查询将SQL插入到

使用SELECT查询将SQL插入到,sql,sql-server,select,insert-into,Sql,Sql Server,Select,Insert Into,由于没有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时,

由于没有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做额外的工作,所以我需要随时访问它们。如果这是最快的方式,我希望在这一个查询中完成这一切

编辑:

谢谢你的帮助

抱歉,我现在知道我的问题不完全清楚了


如果其他_表包含ID 1-1000,并且我传入了ID 999、1000和1001,那么我希望临时表包含999和1000的信息,然后还包含ID=1001、Field1=NULL的条目。我不希望返回带有Field1=NULL的IDS1-998

您必须为非IN Id创建其他查询

还有另外一个

SELECT ID, Field1 
into #temp2
FROM [Other_table] WHERE ID IN (ID1, ID2, ID3...)
这意味着我需要对不匹配的ID做额外的工作吗?你能添加更多的细节吗?也许我们可以在一个查询中完成,而不是单独的查询

更新

这个(ID1、ID2、ID3…)来自哪里?我们可以用join吗?如果你的答案是肯定的,你会得到你想要的东西

试试这个

SELECT *  Into #temp 
FROM(
  SELECT ID, Field1 
  FROM [Other_table] 
  WHERE ID IN (ID1, ID2, ID3...)
  Union
  SELECT ID, Field1 
  FROM [Other_table] 
  WHERE ID NOT IN (ID1, ID2, ID3...)
)
还是这个

SELECT ID, Field1 into #temp
  FROM [Other_table] 
  WHERE ID IN (ID1, ID2, ID3...)
  Union
  SELECT ID, Field1 
  FROM [Other_table] 
  WHERE ID NOT IN (ID1, ID2, ID3...)

每个insert语句只能使用一个目标表。因此,保持
field1
为空似乎是一种简单的方法:

INSERT INTO [#Temp]
SELECT ID, CASE WHEN ID IN (ID1, ID2, ID3...) THEN Field1 END
FROM [Other_table] 
如果id不在列表中,case语句将返回
null
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)

现有解决方案的最快修复方法是从temp表中不存在的其他表中获取所有值。我已将所有Id的字段1标记为空

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

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

INSERT INTO [#Temp]
SELECT ID, NULL AS Field1
FROM [Other_Table]
WHERE ID NOT IN (SELECT DISTINCT ID FROM #Temp)
另一种方法是将其包含在同一INSERT语句中

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

INSERT INTO [#Temp]
    SELECT ID, 
        CASE WHEN ID IN (ID1,ID2....) THEN Field1
             ELSE NULL END AS 'Field1'
    FROM [Other_Table] 

从[Other_table]中选择ID,Field1,其中ID不在(ID1,ID2,ID3…)?好的,也许我遗漏了什么,但这与我当前的查询正好相反;我希望它在同一个查询中同时执行这两个操作?或者是实现这两个结果的最快方法。谢谢,所以你认为我必须做两个查询,这就是我想但想确定的。“其他工作”意味着查询另一台服务器以获取此信息,据我所知,这与我的问题无关。我希望临时表包含找到的信息,并且ID列表不容易找到。@Alex我已经更新了我的答案,在这种情况下,您可以使用Union,结果存储在同一个表中#临时表
case
是t-sql的一部分,至少从sql server 2000开始。除非OP以某种方式使用旧版本,否则您建议的解决方案最多也就过于复杂了。只有一种方法可以获得这些数据,您可以添加您的方法,我正在尝试避免案例陈述,是的,您可以对案例做同样的处理。谢谢有很多方法可以获得数据,问题是哪种方法最好。。。为什么要避免使用case?谢谢@Zohar Peled。这是非常有帮助的,除了我希望结果相反,我的问题不清楚。我已经修改了。
CREATE TABLE [#Temp] (ID Int, Field1 Varchar(100))

INSERT INTO [#Temp]
    SELECT ID, 
        CASE WHEN ID IN (ID1,ID2....) THEN Field1
             ELSE NULL END AS 'Field1'
    FROM [Other_Table]