[英]What type of JOIN to use? mysql
我有一個查詢,其中選擇了所有出售的產品。 我想做的是反向查詢,並在一段時間內獲得所有未售出的產品。
這是對一段時間內售出的所有產品的查詢。
SELECT
product.product_id,
product.product_brand_id,
product.product_model_id,
product.product_subcategory_id,
product.product_retail_price,
product.product_wholesale_price,
product.product_aretail_price,
product.product_awholesale_price,
product.product_oretail_price,
product.product_owholesale_price,
product.product_quoted_price,
product.product_aquoted_price,
product.product_dquoted_price,
product_sold.product_type, 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
AND product.product_subcategory_id = '$subcategory_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'
GROUP BY product_sold.product_type, product.product_id
ORDER BY SUM(product_sold.product_quantity) DESC
有人可以指導我如何獲得未售出的產品嗎,我的庫存有點不知所措。 謝謝。
回答:
SELECT
p.product_id,
p.product_brand_id,
p.product_model_id,
p.product_subcategory_id,
p.product_retail_price,
p.product_wholesale_price,
p.product_aretail_price,
p.product_awholesale_price,
p.product_oretail_price,
p.product_owholesale_price,
p.product_quoted_price,
p.product_aquoted_price,
p.product_dquoted_price,
pq.product_stock_type
FROM
product p
LEFT JOIN
product_sold ps
ON
p.product_id = ps.product_id
INNER JOIN
product_stock pq
ON
p.product_id = pq.product_id
AND
pq.product_quantity > 0
WHERE
p.product_subcategory_id = '$subcategory_id'
AND
ps.product_id IS NULL
通常,獲取不包含在集合B中的集合A成員的方法是使用左連接。 我將從簡化您的查詢開始:
SELECT p.product_id, ps.product_id from product p
LEFT JOIN product_sold ps
WHERE ps.product_id IS NULL
這將返回在product_sold中沒有值的所有產品記錄。 您應該可以從那里添加細節。
嘗試這個 :
SELECT
product.product_id
FROM product
LEFT JOIN
(
SELECT
product.product_id
FROM product
INNER JOIN product_sold
ON product.product_id = product_sold.product_id
AND product.product_subcategory_id = '$subcategory_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'
GROUP BY product_sold.product_type, product.product_id
) AS psold
ON product.product_id = psold.product_id
WHERE psold.product_id IS NULL
這樣,您有一個出售產品的子請求,並且將其與所有產品結合在一起,WHERE子句僅選擇第一個表中的產品(所有產品),而不選擇第二個表中的產品(已售產品)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.