sql >> Database >  >> RDS >> Mysql

Firebird naar MySQL-querymigratie - Selecteer Inner Join Subquery

Het probleem is dat in mySQL de komma-operator een lagere prioriteit heeft dan de join operator, dus de product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid joins worden vóór . geëvalueerd het part table is toegevoegd aan de expressie, vandaar de foutmelding.

Vervang de komma-operators door eenvoudig join operators en verplaats de samenvoegvoorwaarden van de where clausule naar on clausules en alles komt goed:

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

Als u meer van dergelijke zoekopdrachten heeft waarbij u een komma-operator en expliciete joins combineert, moet u ze eens bekijken omdat ze verschillende resultaten kunnen opleveren, zelfs als er geen syntaxisfout in MySQL was.



  1. Doet mee aan ruimtelijke mysql-indexen

  2. Zeer beschikbare databases en clusters implementeren met ClusterControl

  3. pgAdmin-alternatieven - GUI ClusterControl voor PostgreSQL-databasebeheer

  4. De opgeslagen procedure-aanroep met cursors genereert ongeldige kolomnaamuitzondering