Mysql
 sql >> Database >  >> RDS >> Mysql

Query Django raw(), campo calcolato nella clausola WHERE

In realtà non ha nulla a che fare con Django stesso, ma con il modo in cui funziona MySQL.

Non è possibile utilizzare gli alias nelle condizioni WHERE, perché la valutazione della clausola WHERE precede la valutazione degli alias.

Puoi:

  • Ripeti la clausola:

    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''')
    
  • Fai una sottoselezione:

    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''')