Postgresql には最も洗練されたソリューションがあると思います。
SELECT *
FROM T
WHERE ("Key", "Value") IN (('B', 'Alpha'), ('A', 'Charlie'));
SQL フィドルの例
SQL-SERVER 2008 以降ではVALUES
、タプルを構築するために使用できます。
SELECT T.*
FROM T
INNER JOIN
( VALUES
('B', 'Alpha'),
('A', 'Charlie')
) v (Key, Value)
ON v.Key = T.Key
AND v.Value = T.Value
SQL フィドルの例
または、プロシージャの場合、キーと値のペアの型を作成し、これをパラメーターとして渡すことができます。
CREATE TYPE KeyValuePair AS TABLE ([Key] VARCHAR(1), [Value] VARCHAR(7));
DECLARE @T AS KeyValuePair
INSERT @T
VALUES
('B', 'Alpha'),
('A', 'Charlie')
SELECT T.*
FROM T
INNER JOIN @T v
ON v.[Key] = T.[Key]
AND v.Value = T.Value;
SQL フィドルの例
MySQLの場合、これを使用してビルドする必要があると思いますAND/OR
SELECT *
FROM T
WHERE (`Key` = 'A' AND `Value` = 'Charlie')
OR (`Key` = 'B' AND `Value` = 'Alpha')
SQL Fiddle の例
他の DBMS に関する私の知識は限られているため、上記のいずれでもない場合は、申し訳ありませんが、これ以上お役に立てません。
編集 ( a_horse_with_no_nameの助けを借りて)
PostgreSQL 構文はOracleでも機能します(DB2 だと思います)。