SQL:有效地查找来自DB外部的许多ID

时间:2009-04-27 15:53:32

标签: sql

我需要按ID查找数千行,但ID来自数据库外部,所以我无法从其他表中获取这些行:

  

SELECT * FROM some_table WHERE ID IN(      SELECT KnownID FROM some_other_table WHERE someCondition   )

有什么比这更好的了吗?

  

SELECT * FROM some_table WHERE ID IN('1001','1002','1003',...)

我可以参数化这样的查询,其中id的数量不固定吗?或者我每次最终都会连接一个大字符串?

(我正在使用sqlite,顺便说一句,但我对其他数据库也很好奇。)

6 个答案:

答案 0 :(得分:4)

我会创建一个包含变量值的临时表,然后执行“select were in”。

答案 1 :(得分:1)

  

(我正在使用sqlite,顺便说一句,但我对其他数据库也很好奇。)

在sql server中,您可以拥有一个链接服务器,然后只在两者之间进行连接,如果它位于不同的服务器上。如果它位于同一台服务器上但位于不同的数据库中,那么只需执行常规连接并在表中添加dbname(如果表和模式名称)

答案 2 :(得分:0)

答案 3 :(得分:0)

您的输入ID到达的格式是什么?

是否由用户手动输入? 在text / csv / xml文件中? 从服务中撤出?

如果批量获取它们,可以将它们插入到#temp表中,然后根据#temp表选择...例如。

//PSEUDO CODE
foreach(string s in ListOfIdsFromFile)
{
    //INSERT INTO #TempTable (ID) Values (ConvertToInt32(s))
}

然后

SELECT * FROM some_table a INNER JOIN #temp_table b ON a.ID = b.ID

答案 4 :(得分:0)

SQL Server 2008具有一个名为Table Valued Parameters的功能。 See this article

答案 5 :(得分:0)

在SqlServer中,您可以执行类似这样的操作

SELECT * FROM some_table WHERE ID IN (SELECT ID1 UNION ALL SELECT ID2  UNION ALL SELECT ID3  UNION ALL SELECT ID4  UNION ALL SELECT ID4 )