您好我想知道如何访问子查询的结果并将其用作主查询中的条件
这是我的查询代码:
SELECT m.*, dp.department as dep,
(SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( `time` ) ) ) FROM time_management tm WHERE tm.user = m.id AND MONTH(`date`) = MONTH(CURRENT_DATE()) AND YEAR(`date`)= YEAR(CURRENT_DATE()) ) as time
FROM members m
LEFT JOIN department dp ON m.department = dp.id
WHERE m.department = $departmentvar AND tm.time > 34
如您所见,我正在尝试让WHERE子句时间成为最后一个条件,以仅选择SUM大于34的结果。
子查询有可能吗?
欢迎任何帮助。谢谢。
MySQL扩展了HAVING
子句的使用,因此您可以将查询编写为:
SELECT m.*, dp.department as dep,
(SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( `time` ) ) )
FROM time_management tm
WHERE tm.user = m.id AND
MONTH(`date`) = MONTH(CURRENT_DATE()) AND
YEAR(`date`) = YEAR(CURRENT_DATE())
) as time
FROM members m LEFT JOIN
department dp
ON m.department = dp.id
WHERE m.department = $departmentvar
HAVING time > 34;
子句中的time
inHAVING
应该解释为中定义的别名SELECT
。
在大多数其他数据库中,将使用子查询。但是,MySQL实现了子查询,这会产生额外的开销。
另外,我认为LEFT JOIN
这里不需要-除非您的departments
表中没有部门。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句