Mysql
 sql >> база данни >  >> RDS >> Mysql

Миграция на заявка от Firebird към MySQL - Изберете Inner Join Subquery

Проблемът е, че в mySQL операторът запетая има по-нисък приоритет отколкото join оператор, следователно product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid присъединяванията се оценяватпреди part таблица е обединена в израза, оттук и съобщението за грешка.

Заменете операторите със запетая с просто join оператори и преместете условията за присъединяване от where клауза към on клаузи и всичко ще бъде наред:

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

Ако имате повече такива заявки, при които смесвате оператор със запетая и изрични съединения, тогава трябва да ги проверите, защото те могат да дадат различни резултати, дори и да няма синтактична грешка в MySQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не може да се вмъкне китайски символ в MySQL

  2. Изтрийте всички редове с изключение на първия N от таблица с една колона

  3. Вземете резултати от MySQL с помощта на PDO

  4. Вземете средно време между две колони и няколко реда MYSQL

  5. SQL SELECT --> csv файл