Tôi nghĩ Postgresql có giải pháp thanh lịch nhất:
SELECT *
FROM T
WHERE ("Key", "Value") IN (('B', 'Alpha'), ('A', 'Charlie'));
Trong SQL-SERVER 2008 trở đi, bạn có thể sử dụng VALUES
để xây dựng bộ giá trị của bạn:
SELECT T.*
FROM T
INNER JOIN
( VALUES
('B', 'Alpha'),
('A', 'Charlie')
) v (Key, Value)
ON v.Key = T.Key
AND v.Value = T.Value
Hoặc đối với một thủ tục, bạn có thể tạo loại cặp khóa-giá trị và chuyển loại này làm tham số:
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;
Đối với MySQL, tôi nghĩ bạn có thể phải xây dựng điều này bằng cách sử dụng AND/OR
SELECT *
FROM T
WHERE (`Key` = 'A' AND `Value` = 'Charlie')
OR (`Key` = 'B' AND `Value` = 'Alpha')
Kiến thức của tôi về các DBMS khác còn hạn chế, vì vậy, nếu nó không phải là một trong những điều trên, rất tiếc, tôi không thể giúp gì thêm.
CHỈNH SỬA (Với sự trợ giúp của a_horse_with_no_name )
Cú pháp PostgreSQL cũng hoạt động cho Oracle (và tôi nghĩ là DB2)