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

MySQL LIMIT в корелирана подзаявка

Това е вариант на greatest-n-per-group проблем, който се появява често.

Искате едноредовата форма FinishTierPrice (наречете я p1 ), съответстващ на FinishOption и с най-голямо количество, но все пак по-малко или равно на Qty на ProductOptionTier.

Един от начините да направите това е да опитате да съпоставите втори ред (p2 ) от FinishTierPrice, който ще има същата FinishOption и по-голямо количество. Ако такъв ред не съществува (използвайте външно съединение и проверете дали е NULL), тогава редът, намерен от p1 е най-големият.

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. Стандарти за добавяне на дата/час?

  2. Разгръщане на Java приложение с база данни mysql работен плот

  3. Как мога да използвам mysqli_fetch_array() два пъти?

  4. mysql брой дубликати

  5. Не може да се покажат стойности, разделени със запетая, в таблица