sql >> Database teknologi >  >> RDS >> Mysql

MySQL LIMIT i en korreleret underforespørgsel

Dette er en variation af greatest-n-per-group problem, der dukker op ofte.

Du vil have den enkelte række fra FinishTierPrice (kald det p1 ), der matcher FinishOption og med den største mængde, men stadig mindre end eller lig med mængden af ​​ProductOptionTier.

En måde at gøre dette på er at prøve at matche en anden række (p2 ) fra FinishTierPrice, der ville have samme FinishOption og et større antal. Hvis der ikke findes en sådan række (brug en ydre joinforbindelse og test, at den er NULL), så rækken fundet af p1 er den største.

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. Funktion vs. lagret procedure i SQL Server

  2. Hvad betyder =*?

  3. MySQL:er en SELECT-sætning skelet mellem store og små bogstaver?

  4. Udfyld PHP Array fra While Loop