PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Selezione da un database in base a un elenco di coppie univoche

Penso che Postgresql abbia la soluzione più elegante:

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

Esempio SQL Fiddle

In SQL-SERVER 2008 e successivi puoi usare VALUES per costruire le tue tuple:

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

Esempio SQL Fiddle

Oppure per una procedura potresti creare un tipo di coppia chiave-valore e passarlo come parametro:

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;

Esempio SQL Fiddle

Per MySQL penso che potresti dover semplicemente compilarlo usando AND/OR

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

Esempio su SQL Fiddle

La mia conoscenza di altri DBMS è limitata, quindi se non è uno dei precedenti mi dispiace non poter essere di maggiore aiuto.

EDIT (Con l'aiuto di a_horse_with_no_name )

La sintassi PostgreSQL funziona anche per Oracle (e penso DB2)