sql >> Databasteknik >  >> RDS >> Mysql

Firebird till MySQL-frågemigrering - Välj Inner Join Subquery

Problemet är att i mySQL har kommaoperatorn lägre prioritet än join operatorn, därför product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid anslutningar utvärderas före part tabellen är sammanfogad i uttrycket, därav felmeddelandet.

Byt ut kommaoperatorerna med enkel join operatorer och flytta anslutningsvillkoren från where klausul till on klausuler och allt blir bra:

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

Om du har fler sådana frågor där du blandar kommaoperator och explicita kopplingar, bör du kolla upp dem eftersom de kan ge olika resultat även om det inte fanns ett syntaxfel i MySQL.



  1. echo json-array i en phpMyAdmin-kolumn VIA PHP

  2. Skapa ett skalbart databasschema för att lagra golfresultat

  3. Django syncdb fungerar i SQLite, misslyckas i MySQL

  4. PostgreSQL Logical Replication Gotchas