[size=xx-small][/size]数据库中:表 A 字段 aa,bb,cc
写如下语句:
select count(aa) as a
from A
where bb like 'a' and a=1
group by cc
报错:前面命名的新字段a在后面用不了 a=1
改成这样:
select * from
(
select count(aa) as a
from A
where bb like 'a'
group by cc
)t where t.a=1
这种情况就可以了!但写成HQL语句就不行了
问:这种情况该如何改写成相应的HQL语句? :)
第一个SQL会报告说a不存在,因为a只是作为返回结果集中的别名,不能在条件语句中使用,而第二个可以的原因也是因为这个,子查询返回的结果集被包装(不知道这个词用在这对不对)一个虚拟表,表名是t,而表的列名就是结果集中a,所以外层查询可以使用a作为列名进行查询
其实用
[code="java"]
select count(aa) as a
from A
where bb like 'a'
group by cc having count(aa) = 1
[/code]
也可以直接查出来
至于改成HQL,可以如下
[code="java"]
select count(A.aa) as a
from A
where A.bb like 'a'
group by A.cc having count(A.aa) = 1
[/code]
(感觉没有什么变化。。。)
你的查询结果和
select 1 from A as a where a.bb='a'
有什么区别??
呵呵,“曾经地迷茫”说的我到是真没有注意到,不过如果查询结果集多添加几项就有意义了