Мисля, че Postgresql има най-елегантното решение:
SELECT *
FROM T
WHERE ("Key", "Value") IN (('B', 'Alpha'), ('A', 'Charlie'));
В 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
Или за процедура можете да създадете тип двойка ключ-стойност и да подадете това като параметър:
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;
За MySQL мисля, че може да се наложи просто да изградите това с AND/OR
SELECT *
FROM T
WHERE (`Key` = 'A' AND `Value` = 'Charlie')
OR (`Key` = 'B' AND `Value` = 'Alpha')
Познанията ми за други СУБД са ограничени, така че ако не е една от горните, съжалявам, че не мога да бъда повече полезен.
РЕДАКТИРАНЕ (С помощта на a_horse_with_no_name )
Синтаксисът на PostgreSQL също работи за Oracle (и мисля, че DB2)