sql >> Databasteknik >  >> RDS >> PostgreSQL

Välja från en databas baserat på en lista med unika par

Jag tycker att Postgresql har den mest eleganta lösningen:

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

SQL-fiolexempel

I SQL-SERVER 2008 och framåt kan du använda VALUES att bygga dina tuplar:

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

Eller för en procedur kan du skapa en nyckel-värde partyp och skicka detta som en parameter:

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

För MySQL tror jag att du kanske måste bygga detta med AND/OR

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

Exempel på SQL Fiddle

Mina kunskaper om andra DBMS är begränsade, så om det inte är något av ovanstående kan jag tyvärr inte vara till mer hjälp.

REDIGERA (Med hjälp av a_horse_with_no_name )

PostgreSQL-syntaxen fungerar även för Oracle (och jag tror DB2)




  1. Varför tillåter inte Oracle SQL oss att använda kolumnalias i GROUP BY-satser?

  2. Infoga DML med bindningsvariabel:ANVÄNDER Klausul för exekvera omedelbart uttalande

  3. Problem med att uppdatera ett MySQL-fält med PHP

  4. Så här fixar du "Ett korrelationsnamn måste anges för bulkraduppsättningen i from-satsen." i SQL Server