Mysql Django raw()查询,WHERE子句中的计算字段

Mysql Django raw()查询,WHERE子句中的计算字段,mysql,django,mysql-error-1054,Mysql,Django,Mysql Error 1054,我想知道在使用计算字段时,raw()方法的语法是否有任何限制。 下面是一个简单的例子: Company.objects.raw('''SELECT *,core_location.a + core_location.b as dist FROM core_location,core_company ORDER BY dist''') 上述代码按预期工作(结果按计算字段'dist'排序),但当我添加WHERE子句时,例如: Company.objects.raw('''SELECT *,co

我想知道在使用计算字段时,raw()方法的语法是否有任何限制。 下面是一个简单的例子:

Company.objects.raw('''SELECT *,core_location.a + core_location.b as dist
FROM core_location,core_company  
ORDER BY dist''')
上述代码按预期工作(结果按计算字段'dist'排序),但当我添加WHERE子句时,例如:

Company.objects.raw('''SELECT *,core_location.a + core_location.b as dist
FROM core_location,core_company
WHERE dist<10  
ORDER BY dist''')
Company.objects.raw(''选择*,核心位置.a+核心位置.b作为距离
来自core_地点,core_公司

其中dist实际上与Django本身无关,而是与MySQL的工作方式有关

不能在WHERE条件中使用别名,因为WHERE子句的计算在别名计算之前

您可以:

  • 重复该条款:

    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''')
    
    Company.objects.raw(''选择*,核心位置.a+核心位置.b作为距离
    来自core_地点,core_公司
    
    其中(core_location.a+core_location.b)您可以对派生列使用
    HAVING
    子句。顺便说一句-这包括作为聚合的列,例如SUM、COUNT等的结果

    因此,以下措施应该有效:

    Company.objects.raw('''SELECT *,core_location.a + core_location.b as dist
    FROM core_location,core_company
    HAVING dist<10  
    ORDER BY dist''')
    
    Company.objects.raw(''选择*,核心位置.a+核心位置.b作为距离
    来自core_地点,core_公司
    
    使用distNone实际上是调用机制的Django save。您将得到一个MySQL错误。
    Company.objects.raw('''SELECT *,core_location.a + core_location.b as dist
    FROM core_location,core_company
    HAVING dist<10  
    ORDER BY dist''')