PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Sélection à partir d'une base de données basée sur une liste de paires uniques

Je pense que Postgresql a la solution la plus élégante :

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

Exemple SQL Fiddle

Dans SQL-SERVER 2008 et versions ultérieures, vous pouvez utiliser VALUES pour construire vos tuples :

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

Exemple SQL Fiddle

Ou pour une procédure, vous pouvez créer un type de paire clé-valeur et le passer en paramètre :

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;

Exemple SQL Fiddle

Pour MySQL, je pense que vous devrez peut-être simplement le construire en utilisant AND/OR

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

Exemple sur SQL Fiddle

Ma connaissance des autres SGBD est limitée, donc si ce n'est pas l'un des ci-dessus, désolé, je ne peux pas être plus utile.

EDIT (Avec l'aide de a_horse_with_no_name )

La syntaxe PostgreSQL fonctionne également pour Oracle (et je pense DB2)