我需要按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,顺便说一句,但我对其他数据库也很好奇。)
答案 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 )