PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chọn từ Cơ sở dữ liệu dựa trên danh sách các cặp duy nhất

Tôi nghĩ Postgresql có giải pháp thanh lịch nhất:

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

Ví dụ về SQL Fiddle

Trong SQL-SERVER 2008 trở đi, bạn có thể sử dụng VALUES để xây dựng bộ giá trị của bạn:

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

Ví dụ về SQL Fiddle

Hoặc đối với một thủ tục, bạn có thể tạo loại cặp khóa-giá trị và chuyển loại này làm tham số:

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;

Ví dụ về SQL Fiddle

Đối với MySQL, tôi nghĩ bạn có thể phải xây dựng điều này bằng cách sử dụng AND/OR

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

Ví dụ về SQL Fiddle

Kiến thức của tôi về các DBMS khác còn hạn chế, vì vậy, nếu nó không phải là một trong những điều trên, rất tiếc, tôi không thể giúp gì thêm.

CHỈNH SỬA (Với sự trợ giúp của a_horse_with_no_name )

Cú pháp PostgreSQL cũng hoạt động cho Oracle (và tôi nghĩ là 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. SQL LIMIT so với JDBC Statement setMaxRows. Cái nào tốt hơn?

  2. Chọn cột chữ thường với nhóm theo hoặc chọn dưới (cột) trong Rails 4

  3. Có gì sai với truy vấn postgreSQL này?

  4. nhóm theo cần thiết trong câu lệnh SQL count (*)?

  5. Chọn tất cả các cột ngoại trừ một số PostgreSQL