1
編輯:更簡單的例子。 (原標題爲:Oracle Column Injection)
Oracle Dynamic Join Challenge
目標:完成以下查詢生成以下結果?
用途:根據表中現有的列創建列,而不將表放入子查詢中。
規則:
- 重構該查詢把
tbl
在一個子查詢是不是一種選擇。 - 查詢必須使用
a,b->1; x->2; y->3
,而不是簡單地加入1,1,2,1,3
。 - 子查詢
tbl
不得修改。
SELECT val, cat
FROM (SELECT 'a' val FROM DUAL UNION ALL
SELECT 'b' val FROM DUAL UNION ALL
SELECT 'x' val FROM DUAL UNION ALL
SELECT 'b' val FROM DUAL UNION ALL
SELECT 'y' val FROM DUAL) tbl
... JOIN (...) ON ...
val | cat
-----+-----
'a' | 1
'b' | 1
'x' | 2
'b' | 1
'y' | 3
好吧,我得到了這個遠(下同),但我不能添加第二個LEFT JOIN。
SELECT val, cat
FROM (SELECT 'a' val FROM DUAL UNION ALL
SELECT 'b' val FROM DUAL UNION ALL
SELECT 'x' val FROM DUAL UNION ALL
SELECT 'b' val FROM DUAL UNION ALL
SELECT 'y' val FROM DUAL) tbl
LEFT JOIN (SELECT 1 cat FROM DUAL) ON val in ('a','b')
val | cat
-----+-----
'a' | 1
'b' | 1
'x' |
'b' | 1
'y' |
糟糕...更正的主要帖子。 – Steven 2009-10-01 18:48:13
你快到了。我更喜歡一個解決方案,我可以將同一個'cat'的成員放入列表中,因爲在我的實際示例中,'cat'中'val'的列表大約爲30. – Steven 2009-10-01 18:48:43
爲什麼不創建一個將這些值映射到類別的實際表格,並加入到該類別中? – 2009-10-01 19:09:13