使用SELECT查询将SQL插入到
由于没有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时,
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]