【发布时间】:2009-10-01 16:16:54
【问题描述】:
编辑: 简单得多的例子。 (原标题:Oracle 列注入)
目标:完成下面的查询生成以下结果?
目的:创建一个依赖于表中现有列的列,而不将该表放在子查询中。
规则:
- 重组查询以将
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' |
【问题讨论】: