Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
224 views
Welcome To Ask or Share your Answers For Others

1 Answer

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:

enter image description here

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...