Myślę, że Postgresql ma najbardziej eleganckie rozwiązanie:
SELECT *
FROM T
WHERE ("Key", "Value") IN (('B', 'Alpha'), ('A', 'Charlie'));
W SQL-SERVER 2008 i nowszych możesz użyć VALUES
budować swoje krotki:
SELECT T.*
FROM T
INNER JOIN
( VALUES
('B', 'Alpha'),
('A', 'Charlie')
) v (Key, Value)
ON v.Key = T.Key
AND v.Value = T.Value
Lub w ramach procedury możesz utworzyć typ pary klucz-wartość i przekazać to jako parametr:
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;
W przypadku MySQL myślę, że być może będziesz musiał po prostu zbudować to za pomocą AND/OR
SELECT *
FROM T
WHERE (`Key` = 'A' AND `Value` = 'Charlie')
OR (`Key` = 'B' AND `Value` = 'Alpha')
Moja wiedza na temat innych DBMS jest ograniczona, więc jeśli nie jest to jeden z powyższych, przepraszam, nie mogę być bardziej pomocny.
EDYTUJ (Z pomocą a_horse_with_no_name )
Składnia PostgreSQL działa również dla Oracle (i myślę, że DB2)