簡體   English   中英

Mysql LEFT JOIN與可選關系parent <-> child表結合使用不起作用

[英]Mysql LEFT JOIN in combination with optional relation parent<->child table not working

將左聯接與可選值分組時遇到麻煩。

總之我們有

  1. 表子產品:目錄
  2. 表父關系-如果存在! 包含父子關系:catalog_product_relation
  3. 表倉庫:倉庫
  4. 餐桌產品和庫存:wh_products

我們試圖獲得庫存的總數量

  • 庫存是由子產品存儲的,需要按照
  • 如果存在父關系,那么我們應該分組並顯示該數據

更簡單

  • 對於沒有父母的產品:數量總和(已經生效)
  • 對於具有父項的產品:然后按父項標識符進行匯總和求和
  • 並且最好還從目錄中獲取父標識的數據(即正確的名稱和sku)

我希望很清楚...下面的查詢不起作用。 對我來說,步驟1看起來像只是在列中獲取父ID

第2步是將每個簡單產品的簡單產品的數量求和,對於父產品,將所有子簡單產品的數量求和,但顯示父數據

select c.sku as sku,
 IFNULL(pr.parent_id, c.entity_id) as main_id,
 c.type_id as type,
 SUM(CASE WHEN (wh.code='LR') THEN FLOOR(wp.qty) ELSE 0 END) AS 'Loc1',
 SUM(CASE WHEN (wh.code='LS') THEN FLOOR(wp.qty) ELSE 0 END) AS 'Loc2'
 FROM catalog c,
 wh_products wp,
 warehouses wh
 LEFT JOIN catalog_product_relation pr ON pr.parent_id = c.entity_id
 WHERE c.entity_id = wp.product_id and wp.warehouse_id = wh.warehouse_id and wp.qty > 0 
GROUP BY main_id

我將從正確地編寫JOIN並按SELECT的列開始匯總:

SELECT c.sku as sku,
       COALESCE(pr.parent_id, c.entity_id) as main_id, c.type_id as type,
       SUM(CASE WHEN wh.code = 'LR' THEN FLOOR(wp.qty) ELSE 0 END) AS Loc1,
       SUM(CASE WHEN wh.code = 'LS' THEN FLOOR(wp.qty) ELSE 0 END) AS Loc2
FROM catalog c LEFT JOIN
     wh_products wp
     ON c.entity_id = wp.product_id LEFT JOIN
     warehouses wh
     ON wp.warehouse_id = wh.warehouse_id AND wp.qty > 0 LEFT JOIN
     catalog_product_relation pr
     ON pr.parent_id = c.entity_id
GROUP BY c.sku, COALESCE(pr.parent_id, c.entity_id), c.type_id;

我不確定這是否可以解決您的問題。 沒有樣本數據和理想的結果,很難遵循邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM