关于合并语法的MySQL条件
我有一个由合并语法组成的查询。COALESCE语法只是查找文件的审核日期。在WHERE语句中,我只想从关于合并语法的MySQL条件,mysql,coalesce,Mysql,Coalesce,我有一个由合并语法组成的查询。COALESCE语法只是查找文件的审核日期。在WHERE语句中,我只想从AuditDate别名字段输出已审核的文件库,但我不工作。这是我的问题 SELECT COALESCE(qua.starttime, prd.starttime) AS `AuditDate`, prd.employeeno AS `EmployeeNo`, prd.starttime AS `StartTime`, prd.endtime AS `En
AuditDate
别名字段输出已审核的文件库,但我不工作。这是我的问题
SELECT COALESCE(qua.starttime, prd.starttime) AS `AuditDate`,
prd.employeeno AS `EmployeeNo`,
prd.starttime AS `StartTime`,
prd.endtime AS `EndTime`
FROM production prd
LEFT JOIN qualityaudit qua
ON prd.id=qua.id
WHERE `AuditDate` BETWEEN '2011-10-01 00:00:00' AND '2011-10-01 23:59:59';
有人能帮助我如何正确处理此查询吗?使用
SELECT COALESCE(qua.starttime, prd.starttime) AS `AuditDate`,
prd.employeeno AS `EmployeeNo`,
prd.starttime AS `StartTime`,
prd.endtime AS `EndTime`
FROM production prd
LEFT JOIN qualityaudit qua
ON prd.id=qua.id
WHERE COALESCE(qua.starttime, prd.starttime) BETWEEN '2011-10-01 00:00:00' AND '2011-10-01 23:59:59';
以上假设您的日期格式/列类型确实匹配…您的查询需要如下所示
SELECT COALESCE(qua.starttime, prd.starttime) AS `AuditDate`,
prd.employeeno AS `EmployeeNo`,
prd.starttime AS `StartTime`,
prd.endtime AS `EndTime`
FROM production prd
LEFT JOIN qualityaudit qua
ON prd.id=qua.id
WHERE COALESCE(qua.starttime, prd.starttime) BETWEEN '2011-10-01 00:00:00' AND '2011-10-01 23:59:59';
对于您的情况,您不能在WHERE
子句中将来自函数结果的别名用作查询条件(请参阅)。但是您可以使用别名在HAVING
子句中搜索,因为MySQL 5.0.2和更高版本允许HAVING
子句引用select列表或外部子查询中select表达式中命名的任何列或别名,并聚合函数,如
SELECT COALESCE(qua.starttime, prd.starttime) AS `AuditDate`,
prd.employeeno AS `EmployeeNo`,
prd.starttime AS `StartTime`,
prd.endtime AS `EndTime`
FROM production prd
LEFT JOIN qualityaudit qua
ON prd.id=qua.id
HAVING `AuditDate` BETWEEN '2011-10-01 00:00:00' AND '2011-10-01 23:59:59';
两者的结果相同您不能使用
WHERE
子句中SELECT
列表中的别名
使用以下命令:
SELECT *
FROM
( SELECT COALESCE(qua.starttime, prd.starttime) AS `AuditDate`,
prd.employeeno AS `EmployeeNo`,
prd.starttime AS `StartTime`,
prd.endtime AS `EndTime`
FROM production prd
LEFT JOIN qualityaudit qua
ON prd.id=qua.id
) AS tmp
WHERE `AuditDate` BETWEEN '2011-10-01 00:00:00' AND '2011-10-01 23:59:59';
或复制代码:
SELECT COALESCE(qua.starttime, prd.starttime) AS `AuditDate`,
prd.employeeno AS `EmployeeNo`,
prd.starttime AS `StartTime`,
prd.endtime AS `EndTime`
FROM production prd
LEFT JOIN qualityaudit qua
ON prd.id=qua.id
WHERE COALESCE(qua.starttime, prd.starttime)
BETWEEN '2011-10-01 00:00:00' AND '2011-10-01 23:59:59';
您不能像其他人指出的那样使用别名。为了避免两次调用coalesce,可以使用HAVING语句
SELECT COALESCE(qua.starttime, prd.starttime) AS `AuditDate`,
prd.employeeno AS `EmployeeNo`,
prd.starttime AS `StartTime`,
prd.endtime AS `EndTime`
FROM production prd
LEFT JOIN qualityaudit qua
ON prd.id=qua.id
HAVING `AuditDate` BETWEEN '2011-10-01 00:00:00' AND '2011-10-01 23:59:59';
你能比“它不工作”更具体一些吗?谢谢你的帮助,这个查询很好,我不需要创建子查询。谢谢你的帮助,这个查询很好,我不需要创建子查询。谢谢你的帮助,这个查询很好,我不需要创建子查询。谢谢你的帮助,这个查询工作正常,我不需要创建子查询。