MySQL别名子查询不能在where子句

时间:2016-11-12 20:29:15

标签: mysql

我在下面给出了一个查询,它返回所有要求的数据。然后在我需要编写的下一个查询中,我需要将输出限制为子查询大于5的位置。

我会展示一些例子,但我无法理解为什么我不能做我正在尝试的事情。

无限制查询

select t1.BOOK_NUM, t1.BOOK_TITLE,
(select count(t2.CHECK_OUT_DATE) 
from checkout t2
where t2.BOOK_NUM = t1.BOOK_NUM) as Times_Checked_Out
from book t1
order by Times_Checked_Out desc, t1.BOOK_TITLE;

输出截图 enter image description here

尝试使用限制查询

select t1.BOOK_NUM, t1.BOOK_TITLE,
(select count(t2.CHECK_OUT_DATE) 
from checkout t2
where t2.BOOK_NUM = t1.BOOK_NUM) as Times_Checked_Out
from book t1
where Times_Checked_Out > 5
order by Times_Checked_Out desc, t1.BOOK_TITLE;

错误 enter image description here

1 个答案:

答案 0 :(得分:4)

您不能在where子句中使用派生列,需要使用HAVING

select t1.BOOK_NUM, t1.BOOK_TITLE,
(select count(t2.CHECK_OUT_DATE) 
from checkout t2
where t2.BOOK_NUM = t1.BOOK_NUM) as Times_Checked_Out
from book t1
HAVING Times_Checked_Out > 5
order by Times_Checked_Out desc, t1.BOOK_TITLE;