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

MySQL LIMIT w skorelowanym podzapytaniu

To jest odmiana greatest-n-per-group problem, który często się pojawia.

Chcesz jednowierszowy formularz FinishTierPrice (nazwij go p1 ), pasująca do opcji FinishOption i z największą ilością, ale wciąż mniejsza lub równa ilości opcji ProductOptionTier.

Jednym ze sposobów, aby to zrobić, jest próba dopasowania drugiego wiersza (p2 ) z FinishTierPrice, które miałyby tę samą opcję FinishOption i większą ilość. Jeśli taki wiersz nie istnieje (użyj zewnętrznego sprzężenia i sprawdź, czy jest NULL), to wiersz znaleziony przez p1 jest najlepszy.

SELECT Product.Name, ProductOption.Name, a.Qty, a.Price, SheetSize.UpgradeCost,
        FinishType.Name, FinishOption.Name, FinishTierPrice.Qty, FinishTierPrice.Price
FROM `Product`
    JOIN `ProductOption`
        ON Product.idProduct = ProductOption.Product_idProduct
    JOIN `ProductOptionTier` AS a
        ON a.ProductOption_idProductOption = ProductOption.idProductOption
    JOIN `PaperSize`
        ON PaperSize.idPaperSize = ProductOption.PaperSize_idPaperSize
    JOIN `SheetSize`
        ON SheetSize.PaperSize_idPaperSize = PaperSize.idPaperSize
    JOIN `FinishOption`
        ON FinishOption.Product_idProduct = Product.idProduct
    JOIN `FinishType`
        ON FinishType.idFinishType = FinishOption.Finishtype_idFinishType
    JOIN `FinishTierPrice` AS p1
        ON p1.FinishOption_idFinishOption = FinishOption.idFinishOption
        AND p1.Qty <= a.Qty
    LEFT OUTER JOIN `FinishTierPrice` AS p2
        ON p2.FinishOption_idFinishOption = FinishOption.idFinishOption
        AND p2.Qty <= a.Qty AND (p2.Qty > p1.Qty OR p2.Qty = p1.Qty 
            AND p2.idFinishTierPrice > p1.idFinishTierPrice)
WHERE Product.idProduct = 1
    AND p2.idFinishTierPrice IS NULL



  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 - Aktualizuj wartości na podstawie podzapytania

  2. Ignoruj ​​komunikaty o błędach mysql podczas wykonywania pliku sql

  3. Najlepsze praktyki dotyczące optymalizacji witryn LAMP pod kątem szybkości?

  4. Jak zaimportować pojedynczą tabelę do bazy danych mysql za pomocą wiersza poleceń?

  5. Zarządzanie kontami użytkowników, role, uprawnienia, uwierzytelnianie PHP i MySQL - Część 2