2009-04-27 16 views
10

テーブル内の値のペアをMySQLで検索するより良い方法を見つけるのが難しいです。配列に値のペアがあり、IN()関数を複製したいのですが、1つ以上の値があります。2つの値/配列のMySQL IN()?

たとえば、

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

私は、私はできるだけ多くを持っていることができることを見てより多くの「セクシー」解決策があると思うしたいと思います:

foo,1 
boo,2 
goo,3 

現在のソリューションがで私を置く:私は、次の3つのペアを持っています何百ものペアがORを持っていると私は気分が悪くなります。ありがとう!!!

答えて

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

この構文は、混乱を招くことがあり、そしてと交換する方が読みやすいことがあります

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

することができますなら、私は:)

+0

素晴らしい作品!あなたは私がそれを見たことが今明らかになったようです。 – Typhon

+0

これはまさに私が探していたものです!私は知らなかった..ありがとう。 – Tenaciousd93

2

ものの、前者に使用していますテンポラリテーブルに値を入力するだけで(簡単に2つのカラムが必要)、簡単に素早くINNER JOINに参加できます。もしそうでなければ、あなたは@Quassnoiバージョンを使わなければならないでしょう。

0

@Quassnoiと@KMの偉大な答え!

また、あなたはペアの重複を取得し、後処理のためにそれらを選択することができます。

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 
) 
関連する問題