【发布时间】:2019-09-11 04:53:43
【问题描述】:
这个查询是由 Django ORM 使用 RawSQL 生成的:
SELECT `productos`.`codigo_barras`, (
SELECT
articulos.costo_us * (1 + articulos.iva_coef)
FROM
articulos
INNER JOIN (
SELECT
articulos.id, MAX(encargosProveedor.fecha_entrega)
FROM
articulos, encargosProveedor_listado_articulos, encargosProveedor, itemArticulosProveedor
WHERE
articulos.id = itemArticulosProveedor.articulos_id AND
encargosProveedor.id = encargosProveedor_listado_articulos.encargosproveedor_id
GROUP BY
articulos.producto_id
)
AS ultimos ON articulos.id = ultimos.id
) AS `ultimo_precio` FROM `productos`
它给出了一个错误
1242 - 子查询返回多于 1 行
这是子查询
的结果+----+--------------------------------------+
| id | MAX(encargosProveedor.fecha_entrega) |
+----+--------------------------------------+
| 1 | 2019-04-17 |
+----+--------------------------------------+
| 3 | 2019-04-17 |
+----+--------------------------------------+
我阅读了 MYSQL 文档,但我不明白为什么返回两行会有问题。我已经尝试了很多替代方案。
问题出在哪里?
【问题讨论】:
-
这与您的previous question 中的问题相同:您需要将外部查询中的行与内部查询中的行相关联,例如通过
WHERE articulos.producto_id = productos.id或加入中间查询:... FROM productos INNER JOIN (SELECT ...) AS ultimo_precio ON ultimo_precio.producto_id = productos.id。显然你还需要从最里面到中间查询暴露producto_id。 -
谢谢恩德。是的,在阅读了回复和更多文档后,我发现了 相关子查询 的概念,并最终对此查询进行了适当的更改。
-
对于那些有类似问题的人,我觉得很有帮助的一篇文章是:essentialsql.com/…
-
@Hernan 如果您确实找到了解决此问题的方法,您应该将其作为答案发布并接受。
标签: mysql django database subquery django-orm