J'ai une table MySql, que je veux interroger pour les lignes dans lesquelles paires des colonnes sont dans un ensemble spécifique. Par exemple, supposons que ma table ressemble à ceci:Filtrage SQL par plusieurs colonnes
id | f1 | f2
-------------
1 | 'a' | 20
2 | 'b' | 20
3 | 'a' | 30
4 | 'b' | 20
5 | 'c' | 20
Maintenant, je veux extraire les lignes dans lesquelles la paire (f1, f2) sont soit ('a', 30) ou ('b' , 20), à savoir les rangées 2,3,4. Je souhaite également le faire en utilisant un filtre de style 'IN', car j'ai peut-être beaucoup de paires à chercher. Si je tente quelque chose comme:
SELECT * FROM my_table WHERE f1 IN ('a','b') AND f2 IN (30, 20)
Je reçois le produit cartésien des valeurs spécifiées pour f1 et f2 dans les clauses IN, à savoir les lignes avec toutes les combinaisons possibles pour « un » f1 = ou « b » , et f2 = 30, 20, donc la ligne 1 est également sélectionnée.
En bref, je suis besoin de quelque chose comme:
SELECT * FROM my_table WHERE (f1,f2) IN (('a',30), ('b',20))
uniquement avec une syntaxe SQL valide :-)
Toutes les idées?
LOL, j'avais la syntaxe valide tous al ong. Validé en MySql. Merci! – bavaza
Relançons les enjeux: disons que j'ai un index sur les colonnes (f1, f2). En utilisant la phrase EXPLAIN, je vois que MySql utilise l'index pour une seule comparaison (par exemple (f1, f2) = ('a', 30)), mais pas pour la syntaxe 'IN'. Des pensées? – bavaza
@bavaza: Cela semble être une question intéressante. Je vous recommande de le poster comme une nouvelle question (pas un commentaire) afin qu'il puisse être vu par plus de gens. –