例如名單上,如果我如下表選擇基於獨特的雙
Id Key Value
1 A Alpha
2 B Alpha
3 A Charlie
我就把輸入{(A,查理)和(B,阿爾法)}和我要求返回所有的ID我希望它返回2和3,但不是1.
這樣做的最佳方法是什麼?我可以將它全部組合成一個查詢,(爲了速度),還是必須爲我收到的每個值對運行重複查詢。
例如名單上,如果我如下表選擇基於獨特的雙
Id Key Value
1 A Alpha
2 B Alpha
3 A Charlie
我就把輸入{(A,查理)和(B,阿爾法)}和我要求返回所有的ID我希望它返回2和3,但不是1.
這樣做的最佳方法是什麼?我可以將它全部組合成一個查詢,(爲了速度),還是必須爲我收到的每個值對運行重複查詢。
我覺得PostgreSQL有最優雅的解決方案:
SELECT *
FROM T
WHERE ("Key", "Value") IN (('B', 'Alpha'), ('A', 'Charlie'));
在2008年SQL-SERVER及以後你可以用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
O r代表一個過程中,您可以創建一個鍵值對的類型和傳遞這個作爲一個參數:
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;
對於MySQL我想你可能只是建立這個使用AND/OR
SELECT *
FROM T
WHERE (`Key` = 'A' AND `Value` = 'Charlie')
OR (`Key` = 'B' AND `Value` = 'Alpha')
我對其他數據庫管理系統的知識是有限的,所以如果它不是上述抱歉之一,我不能有更多的幫助。
EDIT(隨着a_horse_with_no_name幫助)
PostgreSQL的語法也適用於Oracle(我認爲DB2)
PostgreSQL語法也適用於Oracle(我認爲DB2) –
什麼RDBMS您使用的?輸入如何存儲在變量或其他內容中?您打算如何調用查詢? – LittleBobbyTables
我在RDBMS上有點困惑,但我正在使用postgre並使用hibernate使用java訪問數據庫。 – Landister
請注意,這是Postgres而不是Postgre –