sql >> Database >  >> RDS >> PostgreSQL

Selecteren uit een database op basis van een lijst met unieke paren

Ik denk dat Postgresql de meest elegante oplossing heeft:

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

SQL Fiddle-voorbeeld

In SQL-SERVER 2008 en later kunt u VALUES . gebruiken om je tuples te bouwen:

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

Of u kunt voor een procedure een sleutel-waardepaartype maken en dit als parameter doorgeven:

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

Voor MySQL denk ik dat je dit misschien gewoon moet bouwen met AND/OR

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

Voorbeeld van SQL Fiddle

Mijn kennis van andere DBMS is beperkt, dus als het niet een van de bovenstaande is, kan ik u niet meer helpen.

BEWERKEN (met de hulp van a_horse_with_no_name )

De PostgreSQL-syntaxis werkt ook voor Oracle (en ik denk DB2)




  1. hoe variabele door te geven om opdracht te kopiëren in Postgresql

  2. Maakt u deze fouten bij het gebruik van SQL CURSOR?

  3. PHP:Online Offline-status

  4. index op url of hashing rekening houdend met RAM