2016-03-02 40 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)