sql >> Base de Datos >  >> RDS >> Mysql

Migración de consultas de Firebird a MySQL - Seleccionar subconsulta de unión interna

El problema es que en mySQL el coma operator tiene menor precedencia que el join operador, por lo tanto, el product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid las uniones se evalúan antes la part la tabla se une a la expresión, de ahí el mensaje de error.

Reemplace los operadores de coma con simple join operadores y mover las condiciones de combinación desde el where cláusula a on cláusulas y todo estará bien:

...
FROM   vendor
       inner join vendorparts on vendor.id = vendorparts.vendorid
       inner join part on vendorparts.partid = part.id
       inner join product on product.partid = part.id
       INNER JOIN (SELECT vendorparts.partid,
                          Max(vendorparts.lastcost) AS Highestcost
                   FROM   vendorparts
                   GROUP  BY vendorparts.partid) AS highestcost
               ON part.id = highestcost.partid
       INNER JOIN (SELECT vendorparts.partid,
                          Min(vendorparts.lastcost) AS Lowestcost
                   FROM   vendorparts
                   GROUP  BY vendorparts.partid) AS lowestcost
               ON part.id = lowestcost.partid
WHERE  vendorparts.lastcost <> 0 

Si tiene más consultas de este tipo en las que combina el operador de coma y las uniones explícitas, debería verificarlas porque pueden producir resultados diferentes incluso si no hubo un error de sintaxis en MySQL.