のペアのの列が特定のセットに含まれる行に対してクエリを実行するMySqlテーブルがあります。さて、私がペアを(F1、F2)は( 'A' 30)のいずれかであるか( 'B' の行を抽出したい複数の列によるSQLのフィルタリング
id | f1 | f2
-------------
1 | 'a' | 20
2 | 'b' | 20
3 | 'a' | 30
4 | 'b' | 20
5 | 'c' | 20
:たとえば、私のテーブルはこのようになります を言います、20)、すなわち行2,3,4。私はフェッチする多くのペアがあるかもしれないので、 'IN'スタイルのフィルターを使ってやりたいと思います。私はのような何かしようとした場合:
SELECT * FROM my_table WHERE f1 IN ('a','b') AND f2 IN (30, 20)
私がIN句でF1及びF2に指定された値のデカルト積を取得し、F1 =「A」または「B」のすべての可能な組み合わせで行、すなわち、f2 = 30,20となるので、行1も選択される。唯一
任意のアイデアが:-)、有効なSQL構文の
SELECT * FROM my_table WHERE (f1,f2) IN (('a',30), ('b',20))
:要するに
、私はだようなものが必要?
LOL、私は有効な構文all al ong。 MySqlで検証されます。ありがとう! – bavaza
ステークスを上げましょう:列(f1、f2)にインデックスがあるとします。 EXPLAIN句を使用すると、MySqlは単一の比較(たとえば(f1、f2)=( 'a'、30))にインデックスを使用しますが、 'IN'構文では使用しません。何かご意見は? – bavaza
@bavaza:面白い質問のようです。私は新しい質問(コメントではありません)として投稿して、より多くの人に見られるようにすることをお勧めします。 –