Oracle查询语句中重命名的列在WHERE中无效?

我想做的操作是这样的,有一张用户表和一张用户的属性表,我想在查询用户信息的时候得到该用户是否包含属性的个数,每种属性在属性表中为一行记录,所以我就直接在查询时COUNT 了,但是竟然报错了
下面的查询怎么会出错?

单独查询的时候已经可以显示结果了,为什么在条件语句中使用别名列无效?
好吧,我什么时候手贱按了个T上去。。。

SELECT *
FROM (SELECT id,
code,
name,
deptcode,
(SELECT COUNT (user_code)
FROM pars_cancompreson
WHERE user_code = code)
complain,
content,
createman,
createtime,
updateman,
updatetime,
delflag
FROM usermiddel)
WHERE complain = 1;
写成以上就可以,你如果不把里面括起来,oracle识别不到你的别名;这个语法还是很奇怪的,曾经我也被这个问题困扰过,估计要看oracle的处理步骤,当你使用
SELECT id,
code,
name,
deptcode,
(SELECT COUNT (user_code)
FROM pars_cancompreson
WHERE user_code = code)
complain,
content,
createman,
createtime,
updateman,
updatetime,
delflag
FROM usermiddel
where complain = 1
时,可能oracle先根据条件筛选,然后选择列,所以识别不到你的别名;你可以试试这样,不写子查询它也可以识别你的别名哦
SELECT id,
code,
name,
deptcode,
(SELECT COUNT (user_code)
FROM pars_cancompreson
WHERE user_code = code)
complain,
content,
createman,
createtime,
updateman,
updatetime,
delflag
FROM usermiddel
order by complain
像这个肯定是oracle查出数据以后排序,这样的时候就能识别你的别名了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-08
where,group后不能用别名。要
WHERE (SELECT COUNT(USER_CODE) FROM PARS_CANCOMPERSON WHERE USER_CODE=CODE) =1
还不行就把表usermiddel加上别名。
或换一种写法,用group..having或count()over()都行。追问

考,不是吧?只是ORACLE不能用别名还是全都这样?而且这个别名列的结果我还得在查询结果中使用,这样的话,岂不是很恶心

追答

其它的没试过,可能都是这样。可以换一种写法。

第2个回答  2013-06-08
你的别名是complain where 条件中用的是complaint追问

汗。。。。不知道什么时候手贱按了个T,但是原因不是这个啊

相似回答