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'));
SQL Fiddle Example
Trong SQL SERVER 2008 trở đi bạn có thể sử dụng VALUES
để xây dựng bộ dữ liệu 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
SQL Fiddle Example
O r cho một thủ tục bạn có thể tạo ra một loại cặp khóa-giá trị và chuyển thông tin này như một 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;
SQL Fiddle Example
Đối với MySQL Tôi nghĩ rằng bạn có thể phải chỉ xây dựng này sử dụng AND/OR
SELECT *
FROM T
WHERE (`Key` = 'A' AND `Value` = 'Charlie')
OR (`Key` = 'B' AND `Value` = 'Alpha')
Example on SQL Fiddle
Kiến thức về DBMS khác của tôi bị giới hạn, vì vậy nếu không phải là một trong những điều trên xin lỗi, tôi không thể trợ giúp thêm.
EDIT (Với sự giúp đỡ của a_horse_with_no_name)
Cú pháp PostgreSQL cũng làm việc cho Oracle (và tôi nghĩ rằng DB2)
gì RDBMS bạn đang sử dụng? Các đầu vào được lưu trữ như thế nào, trong các biến hay cái gì khác? Bạn dự định gọi truy vấn như thế nào? – LittleBobbyTables
Tôi hơi bối rối với RDBMS nhưng tôi đang sử dụng postgre và truy cập cơ sở dữ liệu bằng java sử dụng ngủ đông. – Landister
Lưu ý, Postgres không phải là Postgre –