sql >> Databáze >  >> RDS >> Mysql

MySQL LIMIT v korelovaném poddotazu

Toto je varianta greatest-n-per-group problém, který se často objevuje.

Chcete jednořádkový formulář FinishTierPrice (nazývejte jej p1 ), odpovídající FinishOption as největším množstvím, ale stále menším nebo rovným množství ProductOptionTier.

Jedním ze způsobů, jak toho dosáhnout, je pokusit se porovnat druhý řádek (p2 ) z FinishTierPrice, který by měl stejnou možnost FinishOption a větší množství. Pokud žádný takový řádek neexistuje (použijte vnější spojení a otestujte, že je NULL), pak řádek nalezený p1 je největší.

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. Jak zobrazit obrázek ze sloupce blob v Oracle pomocí JasperReports?

  2. Vytvoření indexu na časovém razítku pro optimalizaci dotazu

  3. Jak generovat skripty drop Unique Constraint v databázi SQL Server - SQL Server / Výukový program TSQL, část 99

  4. Jak nahradit ID oddělení oddělená čárkami jejich jménem?