我正在處理產品的雙語網站。MySQL:加入表重複SUM()
每個產品有一個sku
和supplier_id
。當插入產品時,如果sku
和supplier_id
已經存在,而不是創建新產品,我只需更新其數量。
如果只有sku
匹配,但supplier_id
是不同的,那麼我創建一個新產品。
由於該網站是多語言,因此有一些翻譯表。
當我搜索產品時,我會每個顯示一個sku
,對數量進行求和。
這是我的查詢
SELECT
products.id, products.sku, products.slug,
SUM(products.quantity) quantity,
suppliers.name supplier_name,
locale.description,
categories.name category_name
FROM products products
LEFT JOIN products_locale locale ON (products.id = locale.product_id AND locale.language_code = 'it')
LEFT JOIN app_suppliers suppliers ON products.supplier_id = suppliers.id
LEFT JOIN app_categories_locale categories ON (products.category_id = categories.category_id AND categories.language_code = 'it')
WHERE products.slug = 'slug'
GROUP BY products.sku
有2級不同的產品具有相同sku
,一個擁有量5和其他有2
的quantity
場應返回7,而是返回9基本上,第二個產品是重複的。
刪除LEFT JOIN products_locale locale ON (products.id = locale.product_id AND locale.language_code = 'it')
可解決問題,但我需要該字段。
更奇怪的是,我加入了兩個翻譯表,products_locale
和app_categories_locale
,但只有products_locale
會導致此行爲。
有沒有任何方法檢索相同的領域沒有重複的行?
謝謝
這真的很難,沒有任何其他的數據說。嘗試選擇*並刪除組。這應該顯示所有行和一些列是重複行。一旦你確定這些,它會很容易更新查詢 –
你想知道什麼?刪除組不會改變任何內容,選擇*也不會改變任何內容。正如我所說的,是單LEFT JOIN的問題 –