Mysql Django raw()查询,WHERE子句中的计算字段
我想知道在使用计算字段时,raw()方法的语法是否有任何限制。 下面是一个简单的例子: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
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''')