PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Избор от база данни въз основа на списък с уникални двойки

Мисля, че Postgresql има най-елегантното решение:

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

Пример за SQL Fiddle

В SQL-SERVER 2008 и по-нови можете да използвате VALUES за да изградите своите кортежи:

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

Или за процедура можете да създадете тип двойка ключ-стойност и да подадете това като параметър:

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

За MySQL мисля, че може да се наложи просто да изградите това с AND/OR

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

Пример за SQL Fiddle

Познанията ми за други СУБД са ограничени, така че ако не е една от горните, съжалявам, че не мога да бъда повече полезен.

РЕДАКТИРАНЕ (С помощта на a_horse_with_no_name )

Синтаксисът на PostgreSQL също работи за Oracle (и мисля, че DB2)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSONb дати:действителни дати вътрешно?

  2. Как да променя собствеността на някои таблици в база данни от postgres на друг потребител?

  3. org.hibernate.type.TextType и Oracle

  4. Как да настроите psycopg2 с база данни PostgreSQL на Google App Engine

  5. Процес на изпълнение на функциите на Postgresql