SQL INSERT INTO WITH SELECT 查询

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

是否可以在同一查询中保存与其他地方(例如另一个临时表)不匹配的 ID?或者在同一个临时表中,只是 Field1 = NULL?

我需要对不匹配的 ID 进行额外的工作,因此我需要在某个地方随时访问它们。我希望在这个查询中完成所有这一切,如果这是最快的方法的话。

编辑:

感谢您的帮助。

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

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

最佳答案

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

INSERT INTO [#Temp]
SELECT ID, CASE WHEN ID IN (ID1, ID2, 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)

关于SQL INSERT INTO WITH SELECT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30911083/

相关文章:

mysql - 如何在mysql中获取连续第二最少的列

sql - 如何检查数据库中是否存在临时表

mysql - 将mysql表的行变成列

sql - 是否可以使用临时表左外连接普通表?

mysql - COUNT(*) 带和不带 GROUP BY,没有匹配的行

sql - 如何将 Microsoft Exchange 数据导入到 SSIS 中的 SQL

sql - 使用 join 优化 sql 查询

SQL Server 2008 错误 - 无法为对象分配空间

mysql - 如何查询和重新组织当前 MySQL 数据库中的数据?

sql - 选择类别属于层次结构中任何类别的产品