Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Django raw() query, campo calculado na cláusula WHERE


Na verdade, não tem nada a ver com o Django em si, mas com a maneira como o MySQL funciona.

Você não pode usar aliases em condições WHERE, porque a avaliação da cláusula WHERE precede a avaliação de aliases.

Você também pode:

  • Repita a cláusula:
    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''')
    

  • Faça uma subseleção:
    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''')