我通常知道"the order of evaluation for expressions involving user variables is undefined",所以我们不能在同一个select
语句中安全地定义和使用变量。但是如果有子查询呢?举个例子,我有这样的事情:定义和使用一个变量与子查询?
select col1,
(select min(date_)from t where i.col1=col1) as first_date,
datediff(date_, (select min(date_)from t where i.col1=col1)
) as days_since_first_date,
count(*) cnt
from t i
where anothercol in ('long','list','of','values')
group by col1,days_since_first_date;
有没有办法使用(select @foo:=min(date_)from t where i.col1=col1)
安全,而不是重复的子查询?如果是这样,我可以在datediff
函数中或第一次出现子查询(或任一个)吗?
当然,我可以做
select col1,
(select min(date_)from t where i.col1=col1) as first_date,
date_,
count(*) cnt
from t i
where anothercol in ('long','list','of','values')
group by col1,date_;
,然后做一些简单的后期处理,以获得datediff
。或者我可以写两个单独的查询。但是这些不能回答我的问题,即是否可以在查询和子查询中安全地定义和使用相同的变量。
此链接可能对您有所帮助。 http://stackoverflow.com/questions/16715504/mysql-define-a-variable-within-select-and-use-it-within-the-same-select –