2016-03-02 77 views
3

我有一个表和ID和名称。 我收到了一个id列表,我需要他们的名字。SQL或声明与多个选择查询

据我所知,我有两个选择。

创建我的代码for循环,其执行:

SELECT name from table where id=x 

其中x是总是一个数字。

或者我写这样一个查询:

SELECT name from table where id=1 OR id=2 OR id=3 

ID和名称的列表是巨大的,所以我想你不会希望这样。 ID的问题是ID并不总是一个数字,但随机生成的ID包含数字和字符。所以谈论范围不是一个解决方案。

我以性能的角度询问这个问题。

什么是这个问题的一个很好的解决方案?

+0

您有什么注意事项?你需要把它作为另一个应用程序中的代码的一部分吗?你只是谈论易用性?性能??另外,为什么不使用IN运算符? (意思是,FROM表中的WHERE id(1,2,3,4,5,6,7 ......);) – DougieHauser

回答

3

SQLite的有limits上查询的大小,因此,如果有对ID的数量没有已知的上限,则无法使用单个查询。

当您读取多行时(注意:IN (1, 2, 3)比许多OR更容易),除非您还选择了该名称,否则您不知道该名称属于哪个ID,或者按ID排序结果。

性能应该没有明显的差异; SQLite是一个没有客户端/服务器通信开销的嵌入式数据库,如果您使用预处理语句,则不需要再次分析查询。

0

一个“好”的解决方案是使用IN操作:

SELECT name from table where id in (1,2,3) 
0

此外,IN操作符是出于这样的目的内置的语法糖..

SELECT name from table where id IN (1,2,3,4,5,6.....) 
0

希望你越来越ID上,你必须为名称输入临时表执行查询的名单@ InputIDTable,

SELECT name from table WHERE ID IN (SELECT id from @InputIDTable)