形如下的SQL:
select a.aa, a.bb, a.cc
from ( select b.aa, b.bb, case b.dd when ... end cc from b) a
where a.cc = 'someValue' 解释下:
内层查询中 根据b.dd列的值,经过一系列复杂的判断终于得到cc。 外层查询用这个新列cc来过滤数据。 经测试本人的sql 内层查询( select b.aa, b.bb, case b.dd when ... end cc from b) 的结果毫无问题,新列cc很正常。
但是外层的 where a.cc = 'someValue' 过滤不起作用, 查询结果是所有数据。 更郁闷的是,程序中还有个地方也都也是形如上面的sql,居然很正常。 哪位大侠给讲讲怎么回事呢,有没有人遇到类似的情况呢?
select a.aa, a.bb, a.cc
from ( select b.aa, b.bb, case b.dd when ... end cc from b) a
where a.cc = 'someValue' 解释下:
内层查询中 根据b.dd列的值,经过一系列复杂的判断终于得到cc。 外层查询用这个新列cc来过滤数据。 经测试本人的sql 内层查询( select b.aa, b.bb, case b.dd when ... end cc from b) 的结果毫无问题,新列cc很正常。
但是外层的 where a.cc = 'someValue' 过滤不起作用, 查询结果是所有数据。 更郁闷的是,程序中还有个地方也都也是形如上面的sql,居然很正常。 哪位大侠给讲讲怎么回事呢,有没有人遇到类似的情况呢?
select a.aa,a.bb,a.cc from
( select city aa,city_code bb,case when city_code='2300' then '省会' else '非省会' end cc from tb_jg ) a
where a.cc='非省会';
因cc是临时列名,直接放在内循环是不行的,即:
select city aa,city_code bb,case when city_code='2300' then '省会' else '非省会' end cc from tb_jg where cc='非省会'是查询不到任何内容,不过不报错,如果用bb还会报错。
FROM TB_JG
WHERE CASE
WHEN CITY_CODE = '2300' THEN
'省会'
ELSE
'非省会'
END CC = '非省会'
select a.aa,a.bb,a.cc from
(select city aa,city_code bb,case city_code when '2300' then '省会' else '非省会' end cc from tb_jg ) a
where a.cc='非省会';
这语句是不能工作的,我试了,CC = '非省会'条件报错,ORA-00920: invalid relational operator
也许其他数据库可以,Oracle10不行
可以这样写select a.aa, a.bb, a.cc
from ( select b.aa, b.bb, decode(b.dd,'条件1','Value','条件2','Value','defualt') cc from b) a
where a.cc = 'someValue'
select b.aa, b.bb, case b.dd when ... end cc
from b
where case b.dd when ... end = 'someValue'
(select '1' aa, '2' bb, '3' dd
from dual
union all
select '1' aa, '2' bb, '4' dd from dual)select a.aa, a.bb, a.cc
from (select b.aa,
b.bb,
case
when b.dd = '3' then
'33'
else
'44'
end cc
from b) a
where a.cc = '33'未发现你描述的现象。