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]
没有 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]