我认为 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 的了解是有限的,所以如果它不是上述之一,对不起,我无法提供更多帮助。
EDIT (With the help of a_horse_with_no_name)
The PostgreSQL syntax also works for Oracle (and I think DB2)