sql >> Databáze >  >> RDS >> PostgreSQL

Výběr z databáze na základě seznamu jedinečných párů

Myslím, že Postgresql má nejelegantnější řešení:

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

Příklad SQL Fiddle

V SQL-SERVER 2008 a novějších můžete použít VALUES k vytvoření n-tic:

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

Příklad SQL Fiddle

Nebo pro proceduru můžete vytvořit typ páru klíč–hodnota a předat jej jako parametr:

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;

Příklad SQL Fiddle

Pro MySQL si myslím, že to možná budete muset sestavit pomocí AND/OR

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

Příklad na SQL Fiddle

Moje znalosti o jiných DBMS jsou omezené, takže pokud to není jedna z výše uvedených, nemohu vám více pomoci.

UPRAVIT (S pomocí a_horse_with_no_name )

Syntaxe PostgreSQL funguje také pro Oracle (a myslím, že DB2)




  1. Jak přidat dokovací kontejner do existující dockerové sítě

  2. Potřeba počítat záznamy a počet skupin podle data na Oracle db pomocí vývojáře sql

  3. SQL HAVING doložka pro začátečníky

  4. MySQL Create Table jako SELECT