Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL LIMIT dalam Subquery Berkorelasi

Ini adalah variasi dari greatest-n-per-group masalah yang sering muncul.

Anda menginginkan bentuk baris tunggal FinishTierPrice (sebut saja p1 ), cocok dengan FinishOption dan dengan Qty terbesar, tetapi masih kurang dari atau sama dengan Qty ProductOptionTier.

Salah satu cara untuk melakukannya adalah dengan mencoba mencocokkan baris kedua (p2 ) dari FinishTierPrice yang akan memiliki FinishOption yang sama dan Qty yang lebih besar. Jika tidak ada baris seperti itu (gunakan gabungan luar dan uji apakah itu NULL), maka baris tersebut ditemukan oleh p1 adalah yang terbesar.

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 COUNT() dan nulls

  2. Pernyataan Java yang disiapkan tidak dieksekusi

  3. Buat tabel dengan pemeriksaan PHP dengan nilai sebelumnya dan nilai saat ini (Array)

  4. kueri untuk menghapus semua karakter setelah koma terakhir dalam string

  5. Ubah tanggal menjadi nama bulan &tahun