在MySQL中选择数据并通过临时列数据限制(WHERE)

在MySQL中选择数据并通过临时列数据限制(WHERE),sql,mysql,Sql,Mysql,我尝试按状态对订单条目进行排序,但是在我的数据库中没有状态列,我尝试使用数据库中其他列的当前值动态生成它 我在查询中创建了一个带有CASE语句的临时列。我现在要做的是只获取与CASE列的值匹配的表行 以下是我迄今为止所做工作的一个例子: CASE WHEN date_due = 0 AND date_sent = 0 THEN "opened" WHEN date_sent > 0 AND (CURRENT_DATE - date_due) <= 0 THEN "sent"

我尝试按状态对订单条目进行排序,但是在我的数据库中没有状态列,我尝试使用数据库中其他列的当前值动态生成它

我在查询中创建了一个带有CASE语句的临时列。我现在要做的是只获取与CASE列的值匹配的表行

以下是我迄今为止所做工作的一个例子:

CASE WHEN date_due = 0 AND date_sent = 0 THEN "opened" WHEN date_sent > 0 AND (CURRENT_DATE - date_due) <= 0 THEN "sent" END AS status 对我来说,最好的解决方案是什么?是否可以定义一个包含状态的临时变量?

其中在列之前进行计算。因此,在计算where时,不存在状态列。您必须在where条款中填写您的案例陈述或条件:

不过,更实际地说,您需要这样做:

where
    date_sent > 0
    and (CURRENT_DATE - date_due) <= 0
唯一可以使用别名列名的子句是数据库中的order by子句一些数据库(如MySQL)允许您在group by中使用它们。

在MySQL中,这是有效的

select
...
CASE
  WHEN date_due = 0 AND date_sent = 0 THEN "opened" 
  WHEN date_sent > 0 AND (CURRENT_DATE - date_due) <= 0 THEN "sent" 
END AS status 

...
from table

where 
... (other conditions) ...

**HAVING status = "sent"**
如果您不需要包括其他条件,请删除WHERE,leaving,只需选择。。。从…起有

where
    date_sent > 0
    and (CURRENT_DATE - date_due) <= 0
select
...
CASE
  WHEN date_due = 0 AND date_sent = 0 THEN "opened" 
  WHEN date_sent > 0 AND (CURRENT_DATE - date_due) <= 0 THEN "sent" 
END AS status 

...
from table

where 
... (other conditions) ...

**HAVING status = "sent"**