此查询由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文档,但我不明白为什么返回两行会有问题。我试过很多替代方法。
问题出在哪里?
作为select
语句的列包含的子查询称为“标量子查询”。标量子查询应该只能生成零行或一行,因为它的值(标量)将放在查询结果集的返回行中,其中只有一个值的空间。因此,如果子查询返回的行数超过单行,则不能直接用作select
列。
一种选择是强制它最多生成一行,可以使用诸如max()
、min()
、count()
等聚合函数。
另一种选择是将子查询作为“表表达式”来连接,其中对返回的行数没有限制。