Django raw() query, calculated field in WHERE clause

前端 未结 2 1481
星月不相逢
星月不相逢 2021-01-15 02:14

I\'m wondering if there are any limitations on syntax of raw() method when using calculated fields. Here is a quick example:

Company.objects.raw(\'\'\'SELECT         


        
2条回答
  •  执笔经年
    2021-01-15 02:48

    It actually has nothing to do with Django itself, but with the way MySQL works.

    You can't use aliases in WHERE conditions, because WHERE clause evaluation precedes the aliases evaluation.

    You can either:

    • Repeat the 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''')
      
    • Do a subselect:

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

提交回复
热议问题