2017-09-26 20 views
0

我正在構建的工具的一部分涉及將用戶提供的值列表插入到準備好的SQLite語句中。例如,在用戶所希望的供應尺寸和顏色:使用SQLite IN()語句匹配任何值

SELECT * from balloons WHERE size IN ("Medium", "Large") AND color IN ("Red", "Green", "Blue"); 

但是,在一些情況下,一些字段是可選的,並且可以由用戶留空。發生這種情況時,該工具應允許有問題的列上的任何值。例如,用戶提供所需的顏色,但希望允許任何尺寸:

SELECT * from balloons WHERE size IN (~anything~) AND color IN ("Red", "Green", "Blue"); 

通常,我會簡單地刪除約束的大小。但是,由於SQL語句是用佔位符預先分解的,所以我希望避免在運行中解析和重寫它們。

是否有任何SQLite語法,我可以放在IN()語句中,將匹配任何值?或者,是否有不同的方式來形成這些查詢以允許指定的值列表或任何值?或者我可能以錯誤的方式接近整個問題;任何想法都歡迎。

提前致謝!

+0

當列表大小發生變化時會發生什麼? –

+0

@CL。這很好,只有在我想要有效地移除約束並允許任何我遇到困難的情況下。謝謝 – Nathan

+0

但是不同的大小意味着一個新的預先陳述的聲明。爲什麼你可以改變尺寸,但不能刪除IN? –

回答

0

IN運算符總是搜索列表中的值,並且該列表必須至少包含一個條目。

構建一個沒有效果的,你可以對自己比較柱:

... WHERE size IN (size) AND ... 

但完全移除IN可以使查詢速度更快。