SQL INSERT INTO WITH SELECT 查询

SQL INSERT INTO WITH SELECT query

没有 SQL 的经验,我希望有人能帮助我。

我有一个空的临时文件 table,还有一个包含信息的 table。

我的查询大纲如下:

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,它必须使用此信息填充临时 table。

是否可以在同一个查询中保存在其他地方(比如另一个临时 table)不匹配的 ID?或者相同的温度 table,只是在那种情况下 Field1 = NULL?

我需要对不匹配的 ID 做额外的工作,所以我需要在某个地方随时访问它们。如果这是最快的方式,我希望在这个查询中完成所有这些。

编辑:

感谢大家的帮助。

抱歉,我现在发现我的问题并不完全清楚。

如果 Other_table 包含 ID 1 - 1000,我传入 ID 999、1000 和 1001,我希望临时 table 包含 999 和 1000 的信息,然后还有一个ID = 1001 且 Field1 = NULL 的条目。我不想返回 ID 1 - 998 且 Field1 = NULL。

您必须为 NOT IN ID 的

创建其他查询
SELECT ID, Field1 
into #temp1
FROM [Other_table] WHERE ID NOT IN (ID1, ID2, ID3...)

和另一个

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...)

每个插入语句只能使用一个目标 table。因此,将 field1 保留为 null 似乎是一种简单的方法:

INSERT INTO [#Temp]
SELECT ID, CASE WHEN ID IN (ID1, ID2, ID3...) THEN Field1 END
FROM [Other_table] 

case 语句将return null id 该ID 不在列表中。

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

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)

解决现有解决方案的最快方法是从其他 table 获取您的临时 table 中不存在的所有值。我已将所有这些 ID 的 Field1 标记为 NULL。

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]