Cita: pero me sale error
#1248 - Every derived table must have its own alias
Lo que necesitas es un traductor de inglés. Te sugiero usar el de Google.
Eso significa:
Cita: "Cada tabla derivada debe tener su propio alias."
Y lo que implica es que estás haciendo una subconsulta en el FROM sin ponerle el correspondiente alias... Es una regla básica del SQL.
Código MySQL:
Ver original (SELECT productos.id
, SUM( cantidad
* entrada_salida
) TOTAL
FROM inventario
INNER JOIN productos
ON inventario.productos_id
= productos.id
SELECT productos.id
, SUM((proformas_has_productos.cantidad
)*(-1)) AS TOTAL
FROM proformas_has_productos
INNER JOIN productos
ON proformas_has_productos.productos_id
= productos.id
¿Ves el cierre del paréntesis final? ¿Dónde está el alias?
En ninguna parte.
Código MySQL:
Ver original (SELECT productos.id
, SUM( cantidad
* entrada_salida
) TOTAL
FROM inventario
INNER JOIN productos
ON inventario.productos_id
= productos.id
SELECT productos.id
, SUM((proformas_has_productos.cantidad
)*(-1)) TOTAL
FROM proformas_has_productos
INNER JOIN productos
ON proformas_has_productos.productos_id
= productos.id