sql >> Database teknologi >  >> RDS >> Mysql

Firebird til MySQL-forespørgselsmigrering - Vælg Inner Join Subquery

Problemet er, at kommaoperatoren i mySQL har lavere forrang end join operatoren, derfor product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid joins evalueres før part tabellen er forbundet i udtrykket, deraf fejlmeddelelsen.

Erstat kommaoperatorerne med simpel join operatører og flyt forbindelsesbetingelserne fra where klausul til on klausuler og alt vil være i orden:

...
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 

Hvis du har flere sådanne forespørgsler, hvor du blander kommaoperator og eksplicitte joinforbindelser, så bør du tjekke dem ud, fordi de kan give forskellige resultater, selvom der ikke var syntaksfejl i MySQL.



  1. MySQL funktion til at bestemme postnummer nærhed / rækkevidde

  2. Hvordan bruger man MAX i MySQL?

  3. mySQL Største antal efter gruppe

  4. OPDATERING tabel1 SET kolonne1 =(SUM(tabel2{&tabel3} WHERE tabel2_id1 =id1) WHERE id1 =tabel2_id1