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

Valg fra en database baseret på en liste over unikke par

Jeg synes, at Postgresql har den mest elegante løsning:

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

SQL Fiddle Eksempel

I SQL-SERVER 2008 og fremefter kan du bruge VALUES at bygge dine tupler:

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 Eksempel

Eller for en procedure kan du oprette en nøgle-værdi-partype og sende denne 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 Fiddle Eksempel

For MySQL tror jeg, at du måske bare skal bygge dette ved hjælp af AND/OR

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

Eksempel på SQL Fiddle

Mit kendskab til andre DBMS er begrænset, så hvis det ikke er en af ​​ovenstående, kan jeg desværre ikke være til mere hjælp.

EDIT (Med hjælp fra a_horse_with_no_name )

PostgreSQL-syntaksen fungerer også for Oracle (og jeg tror DB2)




  1. Kan ikke oprette en række i størrelse 8937, som er større end det tilladte maksimum på 8060

  2. masseindsamling ved hjælp af til opdatering

  3. Find forbindelsesstrengen til at oprette forbindelse til MySQL Server 5.1.50 ved hjælp af OleDbConnection

  4. MySQL:Indsæt post, hvis den ikke findes i tabellen