简体   繁体   中英

Do I need a temporary table?

I have the following query and I need to add "and distance < 10" to the where clause. Because 'distance' is computed variable it can't be used in where clause. I have tried HAVING instead of where but that breaks the replace part.

I think the answer is to use a temporary table for the distance computation but i can't figure out the syntax as everything I have tried doesn't work.

All help appreciated please. Thanks.

select
    Contractor.contractorID,
    Contractor.firstName,
    Contractor.lastName,
    Contractor.emailAddress,
    Contractor.nationality,
    Contractor.dateOfBirth,
    Contractor.address1,
    Contractor.address2,
    Contractor.city,
    Contractor.county,
    Contractor.postcode,
    Contractor.country,
    Contractor.tel,
    Contractor.mob,
    postcodes.Grid_N Grid_N1,
    postcodes.Grid_E Grid_E1,
    (select Grid_N from postcodes where pCode='".$postcode."') Grid_N2,
    (select Grid_E from postcodes where pCode='".$postcode."') Grid_E2,
    ( (select sqrt(((Grid_N1-Grid_N2)*(Grid_N1-Grid_N2))+((Grid_E1-Grid_E2)*(Grid_E1-Grid_E2))) ))/1000*0.621371192 as distance
from 
    Contractor,
    postcodes 
where 
    postcodes.Pcode = replace(substring(Contractor.postcode,1,length(Contractor.postcode)-3),'','') 
order by 
    distance asc

In MySQL, you can do this with:

where . . .
having distance < 10
order by distance;

You don't need to put the other conditions in the having clause. Also, your query could benefit from using ANSI standard join syntax (using the on clause, for instance).

SELECT list
     , of
     , columns
     , including
     , distance
FROM   (
        <your existing query>
        /* minus ORDER BY clause (needs to be on outermost query */
       ) As a_subquery
WHERE  distance < 10
ORDER
    BY some_stuff

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM