Jeg synes, at Postgresql har den mest elegante løsning:
SELECT *
FROM T
WHERE ("Key", "Value") IN (('B', 'Alpha'), ('A', 'Charlie'));
I SQL-SERVER 2008 og fremefter kan du bruge VALUES
at bygge dine tupler:
SELECT T.*
FROM T
INNER JOIN
( VALUES
('B', 'Alpha'),
('A', 'Charlie')
) v (Key, Value)
ON v.Key = T.Key
AND v.Value = T.Value
Eller for en procedure kan du oprette en nøgle-værdi-partype og sende denne som en parameter:
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;
For MySQL tror jeg, at du måske bare skal bygge dette ved hjælp af AND/OR
SELECT *
FROM T
WHERE (`Key` = 'A' AND `Value` = 'Charlie')
OR (`Key` = 'B' AND `Value` = 'Alpha')
Mit kendskab til andre DBMS er begrænset, så hvis det ikke er en af ovenstående, kan jeg desværre ikke være til mere hjælp.
EDIT (Med hjælp fra a_horse_with_no_name )
PostgreSQL-syntaksen fungerer også for Oracle (og jeg tror DB2)