Mysql 基于自定义计算字段筛选行

Mysql 基于自定义计算字段筛选行,mysql,sql,Mysql,Sql,我想使用WHERE条件筛选返回的行。问题是MySQL不允许我在WHERE子句中使用自定义列名。它给出了一个语法错误 SELECT jobs.*, CASE WHEN job_status = 'submitted' THEN ((2 * 86400) - ($mktime - job_timestamp))/86400 WHEN job_status = 'agreement_pending' THEN (

我想使用WHERE条件筛选返回的行。问题是MySQL不允许我在WHERE子句中使用自定义列名。它给出了一个语法错误

SELECT jobs.*,

        CASE
            WHEN job_status = 'submitted'           THEN ((2 * 86400) - ($mktime - job_timestamp))/86400
            WHEN job_status = 'agreement_pending'   THEN ((1 * 86400) - ($mktime - job_tstamp_agpending))/86400
            WHEN job_status = 'payment_complete'    THEN ((job_duration * 86400) - ($mktime - job_tstamp_pcomplete))/86400
            ELSE 1000000
        END AS sla

FROM jobs 
WHERE sla < 0

在sla<0条件下是否仍可以过滤出行?

MySQL有一个特殊的扩展,您可以使用having子句执行此操作:


这在其他数据库中不受支持。

适用于所有RDBMS的有效解决方案使用派生表:

SELECT *
FROM
  (
    SELECT jobs.*,
        CASE
            WHEN job_status = 'submitted'           THEN ((2 * 86400) - ($mktime - job_timestamp))/86400
            WHEN job_status = 'agreement_pending'   THEN ((1 * 86400) - ($mktime - job_tstamp_agpending))/86400
            WHEN job_status = 'payment_complete'    THEN ((job_duration * 86400) - ($mktime - job_tstamp_pcomplete))/86400
            ELSE 1000000
        END AS sla
    FROM jobs 
  ) AS dt
WHERE sla < 0
SELECT *
FROM
  (
    SELECT jobs.*,
        CASE
            WHEN job_status = 'submitted'           THEN ((2 * 86400) - ($mktime - job_timestamp))/86400
            WHEN job_status = 'agreement_pending'   THEN ((1 * 86400) - ($mktime - job_tstamp_agpending))/86400
            WHEN job_status = 'payment_complete'    THEN ((job_duration * 86400) - ($mktime - job_tstamp_pcomplete))/86400
            ELSE 1000000
        END AS sla
    FROM jobs 
  ) AS dt
WHERE sla < 0