簡體   English   中英

根據唯一對列表從數據庫中進行選擇

[英]Selecting from a Database based on a list of unique pairs

例如,如果給出下表

Id        Key             Value

 1          A             Alpha
 2          B             Alpha
 3          A             Charlie

我接受了輸入{(A,Charlie)和(B,Alpha)}並且我要求返回我希望它返回2和3但不是1的所有ID。

做這個的最好方式是什么? 我可以將它全部合並到一個查詢中(為了速度)還是我必須為我收到的每個值對運行重復查詢。

我認為Postgresql有最優雅的解決方案:

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

SQL小提琴示例

在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小提琴示例

或者對於過程,您可以創建鍵值對類型並將其作為參數傳遞:

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小提琴示例

對於MySQL,我認為您可能必須使用AND/OR來構建它

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

關於SQL小提琴的例子

我對其他DBMS的了解是有限的,所以如果它不是上述抱歉之一,我無法提供更多幫助。

編輯(在a_horse_with_no_name的幫助下)

PostgreSQL語法也適用於Oracle (我認為DB2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM