我有這樣的桌子:
ID | key | value
1 | A1 |o1
1 | A2 |o2
1 | A3 |o3
2 | A1 |o4
2 | A2 |o5
3 | A1 |o6
3 | A3 |o7
4 | A3 |o8
我想撰寫一個可以根據 key column 過濾 value column 的 oracle 查詢。像這樣的事情
select ID
where
if key = A1 then value ='o1'
and key = A3 then value ='o4'
請幫我寫這個查詢。
***為了澄清我的問題,我需要 ID 串列,結果所有條件(鍵值)對它們都為真。對于每個 ID,我應該檢查鍵值(使用 AND),如果所有條件都為真,那么這個 ID 是可以接受的。
謝謝
uj5u.com熱心網友回復:
IF表示 PL/SQL。在 SQL 中,我們使用CASE運算式代替(或者DECODE,如果需要)。這樣做,您將value移出運算式并使用以下內容:
where id = 1
and value = case when key = 'A1' then 'o1'
when key = 'A3' then 'o4'
end
uj5u.com熱心網友回復:
您正在混合過濾和選擇。在 SELECT 串列中列出要顯示的列以及在 WHERE 子句中用于過濾的列
SELECT key, value
FROM my_table
WHERE ID = 1 AND key IN ('A1', 'A2')
如果value表中沒有列,則可以使用DECODE 函式
SELECT key, DECODE(key, 'A1', 'o1', 'A2', 'o4', key) AS value
FROM my_table
WHERE ID = 1
在 之后key,您必須指定成對的搜索和結果值。這些對可以跟一個默認值。在這個例子中,由于我們沒有為 指定結果'A3',結果將是鍵本身。如果未指定默認值,則將為缺少的搜索值回傳 NULL。
更新
我似乎誤解了這個問題(見@mathguy 的評論)。您可以通過簡單地使用布爾運算子 AND 和 OR 來過濾您想要的方式
SELECT * FROM
FROM my_table
WHERE
ID = 1 AND
(
key = 'A1' AND value ='o1' OR
key = 'A3' AND value ='o4'
)
通過使用此模式,可以輕松添加更多此類約束。請注意,AND 優先于 OR(例如 * 高于 )。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/389869.html
