販売量と日付順で商品のリストを取得しようとしています。また、リストで販売されていない製品を表示したいので、最初にサブクエリを実行しようとしましたが、MYSQL から次のメッセージが表示されます。
オペランドには 1 列を含める必要があります
SELECT product.product_id,
product.product_brand_id,
product.product_model_id,
product.product_subcategory_id,
product.product_retail_price,
product.product_wholesale_price
FROM product
WHERE product.product_subcategory_id = $subcategory_id
AND (SELECT SUM(product_sold.product_quantity) AS product_quantity_sold,
SUM(product_sold.product_total_price) AS total_price_sold
FROM product
INNER JOIN product_sold
ON product.product_id = product_sold.product_id
INNER JOIN sales
ON sales.sales_id = product_sold.product_sales_id
WHERE sales.sales_approved = '1'
AND sales.sales_approved_time > '$start_timestamp'
AND sales.sales_approved_time < '$end_timestamp')
サブクエリが機能しなかったのでLEFT OUTER JOIN
、このクエリで別のメンバーが提案したように使用してみました:
SELECT product.product_id,
product.product_brand_id,
product.product_model_id,
product.product_subcategory_id,
product.product_retail_price,
product.product_wholesale_price,
SUM(product_sold.product_quantity) AS product_quantity_sold,
SUM(product_sold.product_total_price) AS total_price_sold
FROM product
LEFT OUTER JOIN product_sold ON product.product_id = product_sold.product_id
AND product.product_subcategory_id = $subcategory_id
LEFT OUTER JOIN sales ON sales.sales_id = product_sold.product_sales_id
WHERE sales.sales_approved = '1'
AND sales.sales_approved_time > '$start_timestamp'
AND sales.sales_approved_time < '$end_timestamp'
GROUP BY product.product_id
ORDER BY SUM(product_sold.product_quantity) DESC
しかし、このクエリでLEFT OUTER JOIN
は、販売された製品のみのリストが表示されます。リストで販売されていない製品も表示する必要があります。
使用されるスキーマは次のとおりです sqlfiddle.com/#!2/967ee