Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Migracja zapytań Firebird do MySQL — wybierz podzapytanie Inner Join

Problem polega na tym, że w mySQL operator przecinka ma niższy priorytet niż join operatora, dlatego product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid połączenia są oceniane przed part tabela jest połączona w wyrażeniu, stąd komunikat o błędzie.

Zastąp operatory przecinkami prostymi join operatorów i przenieś warunki łączenia z where klauzula on klauzule i wszystko będzie dobrze:

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

Jeśli masz więcej takich zapytań, w których mieszasz operator przecinka i jawne złączenia, powinieneś je sprawdzić, ponieważ mogą dawać różne wyniki, nawet jeśli w MySQL nie wystąpił błąd składni.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. auxService:mapreduce_shuffle nie istnieje

  2. Konwertuj datę i godzinę JS na datę i godzinę MySQL

  3. Wyszukiwanie niewrażliwe na znaki diakrytyczne w MySQL (arabski)

  4. Identyfikator automatycznego inkrementacji MySQL nagle przeskoczył do MAXINT, co może być przyczyną?

  5. Grupuj wyniki PHP/MySQL według kolumny