sql >> Databáze >  >> RDS >> Mysql

Migrace dotazů Firebird na MySQL – Vyberte poddotaz Inner Join

Problém je v tom, že v mySQL má operátor čárka nižší prioritu než join operátor, proto product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid spojení se vyhodnocují před part tabulka je spojena ve výrazu, proto se zobrazuje chybová zpráva.

Operátory čárky nahraďte jednoduchým join operátory a přesunout podmínky spojení z where klauzule na on klauzule a vše bude v pořádku:

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

Pokud máte více takových dotazů, kde kombinujete operátor čárky a explicitní spojení, měli byste si je zkontrolovat, protože mohou přinést různé výsledky, i když v MySQL nebyla syntaktická chyba.



  1. Kolik databázových indexů je příliš mnoho?

  2. SQL Injection, Quotes a PHP

  3. Vztah mezi katalogem, schématem, uživatelem a instancí databáze

  4. mySQL korelovaný poddotaz