PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Auswahl aus einer Datenbank basierend auf einer Liste eindeutiger Paare

Ich denke, Postgresql hat die eleganteste Lösung:

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

SQL-Fiddle-Beispiel

In SQL-SERVER 2008 und höher können Sie VALUES verwenden um Ihre Tupel zu erstellen:

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-Beispiel

Oder Sie könnten für eine Prozedur einen Schlüssel-Wert-Paartyp erstellen und diesen als Parameter übergeben:

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-Beispiel

Für MySQL müssen Sie dies möglicherweise einfach mit AND/OR erstellen

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

Beispiel für SQL Fiddle

Mein Wissen über andere DBMS ist begrenzt. Wenn es also keines der oben genannten ist, kann ich Ihnen leider nicht weiterhelfen.

EDIT (Mit Hilfe von a_horse_with_no_name )

Die PostgreSQL-Syntax funktioniert auch für Oracle (und ich denke DB2)