SELECT
productos.prod_id,
productos.prod_codigo1,
productos.prod_descripcion,
(SELECT SUM(cotdetalle.cotd_cantidad)
FROM cotdetalle
WHERE cotdetalle.cotd_codigo = productos.prod_codigo1
AND cotdetalle.cotd_cote_id IN(
SELECT cotencabezado.cote_id
FROM cotencabezado
WHERE cotencabezado.cote_status = 'cerrada'
AND MONTH(cotencabezado.cote_cierre) = MONTH(NOW()) AND YEAR(cotencabezado.cote_cierre) = YEAR(NOW())
)
) AS cuantos,
(SELECT SUM(cotdetalle.cotd_cantidad * cotdetalle.cotd_precio)
FROM cotdetalle
WHERE cotdetalle.cotd_codigo = productos.prod_codigo1
AND cotdetalle.cotd_cote_id IN(
SELECT cotencabezado.cote_id
FROM cotencabezado
WHERE cotencabezado.cote_status = 'cerrada'
AND MONTH(cotencabezado.cote_cierre) = MONTH(NOW()) AND YEAR(cotencabezado.cote_cierre) = YEAR(NOW())
)
) AS monto
FROM productos
ORDER BY monto DESC
LIMIT 0, 50
昨夜、このクエリが出てきました。私の質問は、多すぎますか? ネストされたクエリをすべて使用せずに同じ結果を得る方法は他にもあると確信しています..動作しますが、開発環境では時間がかかります.本番環境ではもっと時間がかかると思います...任意の提案? テーブル構造が必要な場合はお知らせください...
編集:実際には、その 2 番目の SELECT が最も気になります。最初の SELECT とまったく同じですが、2 番目の結果が必要ですが、最初の SELECT で 2 番目の結果を取得しようとすると、「オペランドには 1 を含める必要があります。列」エラー...
もう少し情報: monto、cuantos、productos.prod_codigo1、productos.prod_descripcion で注文できるようにする必要があります。
sqlfiddle.com の例: http://sqlfiddle.com/#!2/c4391/1