Sql 基于唯一对列表从数据库中选择

Sql 基于唯一对列表从数据库中选择,sql,postgresql,Sql,Postgresql,例如,如果给我下表 Id Key Value 1 A Alpha 2 B Alpha 3 A Charlie 我接受输入{(A,Charlie)和(B,Alpha)}并要求返回所有ID,我希望它返回2和3,但不是1 最好的方法是什么?我可以将所有内容合并到一个查询中(以提高速度),还是必须对收到的每个值对运行重复查询。我认为

例如,如果给我下表

Id        Key             Value

 1          A             Alpha
 2          B             Alpha
 3          A             Charlie
我接受输入{(A,Charlie)和(B,Alpha)}并要求返回所有ID,我希望它返回2和3,但不是1


最好的方法是什么?我可以将所有内容合并到一个查询中(以提高速度),还是必须对收到的每个值对运行重复查询。

我认为Postgresql有最优雅的解决方案:

SELECT  *
FROM    T
WHERE   ("Key", "Value") IN (('B', 'Alpha'), ('A', 'Charlie'));

在SQL-SERVER 2008及以后版本中,您可以使用
构建元组:

SELECT  T.*
FROM    T
        INNER JOIN
        (   VALUES
                ('B', 'Alpha'),
                ('A', 'Charlie')
        ) v (Key, Value)
            ON v.Key = T.Key
            AND v.Value = T.Value

或者,对于过程,您可以创建键值对类型并将其作为参数传递:

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;

对于MySQL,我认为您可能需要使用
和/或

SELECT  *
FROM    T
WHERE   (`Key` = 'A' AND `Value` = 'Charlie')
OR      (`Key` = 'B' AND `Value` = 'Alpha')

我对其他数据库管理系统的了解是有限的,所以如果不是上面提到的,很抱歉,我不能提供更多帮助

编辑(在的帮助下)


PostgreSQL语法也适用于(我认为是DB2)

您使用的是什么RDBMS?如何将输入存储在变量或其他内容中?您打算如何调用查询?我对RDBMS有点困惑,但我使用postgre,并使用hibernate使用java访问数据库。注意,这是Postgres而不是postgre番茄。。。。这篇文章写得不好down@LandisterTomat,Tomato,更像:-p PostgreSQL语法也适用于Oracle(我认为DB2)