PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Memilih dari Database berdasarkan daftar pasangan unik

Saya pikir Postgresql memiliki solusi paling elegan:

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

Contoh Fiddle SQL

Di SQL-SERVER 2008 dan seterusnya Anda dapat menggunakan VALUES untuk membangun tupel Anda:

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

Contoh Fiddle SQL

Atau untuk prosedur, Anda dapat membuat jenis pasangan nilai kunci dan meneruskannya sebagai 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;

Contoh Fiddle SQL

Untuk MySQL, saya pikir Anda mungkin harus membuatnya menggunakan AND/OR

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

Contoh pada SQL Fiddle

Pengetahuan saya tentang DBMS lain terbatas, jadi jika itu bukan salah satu dari yang di atas, maaf saya tidak bisa membantu lebih banyak.

EDIT (Dengan bantuan a_horse_with_no_name )

Sintaks PostgreSQL juga berfungsi untuk Oracle (dan menurut saya 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. Bagaimana saya bisa mengelompokkan anak-anak dan orang tua dalam satu kueri?

  2. Bagaimana cara memilih id dengan grup tanggal maksimum berdasarkan kategori di PostgreSQL?

  3. Apa yang terjadi dengan NpgsqlCopySerialize dan NpgsqlCopyIn

  4. Postgres bersarang jika dalam kasus permintaan

  5. Hapus/ganti karakter khusus dalam nilai kolom?