您好我想知道以下HAVING子句是否有效
SELECT
m.id,
m.username,
m.name,
m.department,
dp.department as dep,
dp.id,
(
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 (($key - time) > 34)
在这种情况下$key = 100
time = 5:00:00
这个想法是只选择满足时间不够的条件的结果,例如
显示具有time = 5:00:00
的结果,因为(100-5)= 95> 34
但是不显示具有time = 95:00:00
的结果,因为(100-95)= 5> 34
例如?
答案 0 :(得分:0)
是的,可以在HAVING子句中包含表达式。
但是MySQL并不知道如何处理令牌$key
,如果这是发送的SQL文本的一部分。
也许客户端程序正在进行一些变量替换来生成一个字符串,并且$key
将被替换为将要发送给MySQL的字符串中的100
...&#39这是我们可能会在这里做出的假设。但这是一个假设。您似乎在询问发送给MySQL的SQL语句。
只返回时间不够的行",在HAVING子句中确实可以使用该条件。
结果集中的time
列将是数据类型TIME。
但是我对这个结构感到困惑......
100 - time > 34
为什么要从数字文字中减去TIME数据类型?
如果我们想要比较TIME数据类型,将它与另一种TIME数据类型进行比较或将TIME转换为秒数会更有意义。
(它完全不清楚100
和34
代表什么。)
好像你想做类似的事情:
HAVING time < '01:06:00'
或
HAVING time < SEC_TO_TIME(( 100 - 34 )*60)
或者
HAVING ( 100 - TIME_TO_SEC(time) ) > 34
目前还不清楚你想要达到的目标,所以这些只是一些看似比原版更有效的模式。