Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête Django raw(), champ calculé dans la clause WHERE

Cela n'a en fait rien à voir avec Django lui-même, mais avec la façon dont MySQL fonctionne.

Vous ne pouvez pas utiliser d'alias dans les conditions WHERE, car l'évaluation de la clause WHERE précède l'évaluation des alias.

Vous pouvez soit :

  • Répétez la clause :

    Company.objects.raw('''SELECT *,core_location.a + core_location.b as dist
    FROM core_location,core_company
    WHERE (core_location.a + core_location.b)<10    
    ORDER BY dist''')
    
  • Effectuez une sous-sélection :

    Company.objects.raw('''SELECT * FROM (
        SELECT *,core_location.a + core_location.b as dist
        FROM core_location,core_company            
    ) as subselect
    WHERE dist<10  
    ORDER BY dist''')