Re: using alias in where clause

"shawn l.green" <[email protected]>
Newsgroups gmane.comp.db.mysql.general
Organization Oracle Corporation
Message-ID <[email protected]>

On 1/28/2016 1:14 PM, Larry Martell wrote:
> On Tue, Jan 26, 2016 at 8:40 AM, Hal.sz S.ndor <[email protected]> wrote:
>> 2016/01/25 19:16 ... Larry Martell:
>>>
>>> SELECT IFNULL(f_tag_bottom,
>>>                   IFNULL(f_tag_bottom_major_axis,
>>>                    IFNULL(f_tag_bottom_minor_axis,
>>>                     IFNULL(f_tag_ch_x_bottom,
>>>                      IFNULL(f_tag_ch_y_bottom, NULL))))) as ftag,
>>>                  STDDEV(ch_x_top)
>>> ....
>>
>> Of course, this isn't your real problem, but you could use COALESCE instead
>> of all those IFNULLs (and you don't need the last one):
>>          SELECT COALESCE(f_tag_bottom, f_tag_bottom_major_axis,
>> f_tag_bottom_minor_axis, f_tag_ch_x_bottom, f_tag_ch_y_bottom) as ftag,
>>                  STDDEV(ch_x_top)
>>          ....
>>
>> As Johnny Withers points out, you may repeat the expression in the
>> WHERE-clause:
>>          WHERE COALESCE(f_tag_bottom, f_tag_bottom_major_axis,
>> f_tag_bottom_minor_axis, f_tag_ch_x_bottom, f_tag_ch_y_bottom) = 'E-CD7'
>> If really only one of those is not NULL, it is equivalent to this:
>>          'E-CD7' IN (f_tag_bottom, f_tag_bottom_major_axis,
>> f_tag_bottom_minor_axis, f_tag_ch_x_bottom, f_tag_ch_y_bottom)
>
> Many thanks to Hal.sz and Johnny - I had forgotten about coalesce and
> I didn't know I could use that in a where clause. This worked great
> for the requirement I had, but of course, once that was implemented my
> client changed the requirements. Now they want to know which of the 5
> f_tag_* columns was matched. Not sure how I'll do that. Probably need
> another query.
>
One option to consider is to add another column to the query with a CASE 
similar to this...

SELECT
, ... original fields ...
, CASE
   WHEN f_tag_bottom THEN 'f_tag_bottom'
   WHEN f_tag_bottom_major_axis THEN 'f_tag_bottom_major_axis'
   ... repeat for the rest of the fields to test ...
   ELSE 'none'
   END as match_flag
FROM ...

Technically, the term in the WHERE clause should prevent a 'none' result 
but I put it there to help future-proof the code.

-- 
Shawn Green
MySQL Senior Principal Technical Support Engineer
Oracle USA, Inc. - Integrated Cloud Applications & Platform Services
Office: Blountville, TN

Become certified in MySQL! Visit https://www.mysql.com/certification/ 
for details.

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.