2017-09-26 10 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ステートメントはプレースホルダーで事前構成されているので、解析して直ちに書き直すことは避けたいと考えています。

IN()ステートメント内に任意の値に一致するSQLite構文がありますか?あるいは、指定された値リストまたは値のいずれかを許可するために、これらのクエリを作成する別の方法がありますか?あるいは、私は問題全体に間違った方法で近づいているかもしれません。どんな考えも歓迎です。

ありがとうございます!

+0

リストのサイズが変わるとどうなりますか? –

+0

@CL。それはうまくいきます、それは私が制約を効果的に取り除き、私が問題を抱えているものを許可したい場合のみです。おかげで – Nathan

+0

しかし、サイズが異なると、あらかじめ作成された新しい文が使用されます。なぜあなたはサイズを変更できますが、INを削除できませんか? –

答えて

0

IN演算子は常にリスト内の値を検索し、リストには少なくとも1つのエントリが含まれている必要があります。効果はありませんInを構築するために

は、あなたが自分自身に対して列を比較することができます:

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

しかし、より高速クエリを作ることができ、完全にInを取り除きます。

関連する問題