MySQL - Search into a custom Column

2019-09-21 04:06发布

问题:

I want to run a MySQL query like this-

 SELECT country_ID*2/id*3.159 as my_id
 FROM `state`
 WHERE my_id>2;

When I run it, I am getting an error like this-

1054 - Unknown column 'my_id' in 'where clause'

Is there any alternative solution to search in my new created virtual column my_id ?


Actually I am trying to make a search in Laravel Query Builder like this-

  DB::table(    'project')->select( 'project.id as id',
                                    'project.completion_date as completion_date',
                                     DB::raw('FORMAT(project.total_cost_to_dispose - project.actual_cost_dispose, 2) as disposal_savings')
                                   )
                            ->where(disposal_savings>100);

Can I do it?

If not, then what is the solution in Laravel or MySQL?

回答1:

Use complete condition again in where clause as:

  DB::table(    'project')->select( 'project.id as id',
                                    'project.completion_date as completion_date',
                                     DB::raw('FORMAT(project.total_cost_to_dispose - project.actual_cost_dispose, 2) as disposal_savings')
                                   )
                            ->where FORMAT(project.total_cost_to_dispose - project.actual_cost_dispose, 2) > 100;


回答2:

You cannot refer in WHERE to aliases, use instead:

SELECT country_ID*2/id*3.159 as my_id 
FROM `state`
WHERE (country_ID*2/id*3.159)>2;

or use subquery:

SELECT t.*
FROM
(
   SELECT country_ID*2/id*3.159 as my_id 
   FROM `state`
) as t
WHERE t.my_id>2

Simplified logical query processing, SELECT is almost last, so WHERE doesn't know about my_id alias:

Image source: https://social.technet.microsoft.com/wiki/contents/articles/20724.all-at-once-operations-in-t-sql.aspx