2009-04-27 15 views
10

Je n'arrive pas à trouver un meilleur moyen de rechercher dans MySQL une paire de valeurs dans une table. J'ai les paires de valeurs dans un tableau, et voudrais dupliquer la fonction IN(), mais pour plus de 1 valeur.MySQL IN() pour deux valeur/tableau?

Par exemple destiné; Je les 3 paires suivantes:

foo,1 
boo,2 
goo,3 

La solution actuelle me met à:

SELECT * FROM [table] WHERE 
(column1 = 'foo' AND column2 = 1) OR 
(column1 = 'boo' AND column2 = 2) OR 
(column1 = 'goo' AND column2 = 3); 

Je voudrais penser qu'il ya une solution plus « sexy » de voir que je pouvais avoir autant comme cent paires et avoir ce qui peut en quelque sorte me rend nauséeux. Merci!!!

Répondre

30
SELECT * 
FROM foo 
WHERE (column1, column2) IN (('foo', 1), ('bar', 2)) 

Cette syntaxe peut être source de confusion, et il peut être plus lisible pour le remplacer par:

SELECT * 
FROM foo 
WHERE ROW(column1, column2) IN (ROW('foo', 1), ROW('bar', 2)) 

Je suis habitué à l'ancienne, bien :)

+0

Cela fonctionne très bien! Cela semble si évident maintenant que vous l'avez vu. – Typhon

+0

C'est exactement ce que je cherchais! Je ne savais pas .. Merci mon pote! – Tenaciousd93

2

Si vous le pouvez obtenir vos valeurs dans une table temporaire (vous avez seulement besoin des deux colonnes) facilement et rapidement, vous pouvez juste rejoindre votre chemin là-bas. Sinon, vous devrez utiliser la version @Quassnoi.

0

Grandes réponses de @Quassnoi et @KM !!!

En outre, vous pouvez obtenir des doubles paires et les sélectionner pour le post-traitement:

SELECT * 
FROM `foo` 
WHERE (`id_obj` , `Foo_obj`) 
IN (
    SELECT `id_obj` , `Foo_obj` 
    FROM `foo` 
    GROUP BY `id_obj` , `Foo_obj` 
    HAVING count(*) > 1 
)