编辑:更简单的例子。(原标题: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' |