2011-09-08 125 views
0

我有一個eshop數據庫,我已經複製了一些產品以便將它們移動到不同的類別(批發/零售)。我需要更新,在它的名字有「[CLONE]」每種產品的CATEGORY_ID,這就是即時通訊做:使用2個連接的更新表

首先,我檢查有多少產品需要移動:

select p.product_id, pd.product, pc.category_id 
from cscart_products p 
join `cscart_product_descriptions` pd on p.product_id = pd.product_id 
join `cscart_products_categories` pc on p.product_id = pc.product_id 
where pd.product like '%CLONE%' 
and pc.category_id = '17'; -- 17 is the current category_id 

取出16行;

然後,我執行更新:

UPDATE cscart_products_categories pc 
join `cscart_product_descriptions` pd on pc.product_id = pd.product_id 
join `cscart_products` p on pc.product_id = p.product_id 
SET pc.category_id = '30' -- the category to be moved to 
WHERE pc.category_id = '17' 
AND pd.product like '%[CLONE]%'; 

9行受到影響;如你所見,16箇中只有9個正在更新,顯然在我的更新語句中有什麼錯誤,但是什麼?樣本數據可以在這裏找到http://www.megaupload.com/?d=AM85UQFY

+0

我已經更新了原來的職位,因爲我曾誤把值更新查詢順序錯誤。 – bikey77

+0

這7個不反應可能已經是30的價值,因此不受影響? –

回答

1

你的第一個查詢發現16行有category_id = 17

你的第二個查詢更改9行是HAD category_id 30 to now have CATEGORY_ID 17

所以第二個查詢後,再 - 運行第一個查詢應與`CATEGORY_ID 17

發現16 + 9 = 25分的記錄。如果你想找到多少結果將被更新,你應該運行帶有`CATEGORY_ID = 30的第一個查詢:

select p.product_id, pd.product, pc.category_id 
from cscart_products p 
join `cscart_product_descriptions` pd on p.product_id = pd.product_id 
join `cscart_products_categories` pc on p.product_id = pc.product_id 
where pd.product like '%CLONE%' 
and pc.category_id = '30'; -- the one that will be changed 

- 9行發現

UPDATE cscart_products_categories pc 
join `cscart_product_descriptions` pd on pc.product_id = pd.product_id 
join `cscart_products` p on pc.product_id = p.product_id 
SET pc.category_id = '17' 
WHERE pc.category_id = '30' -- the category to be moved to 
AND pd.product like '%[CLONE]%'; 

- 9行受到影響

+0

我錯了,我發佈了錯誤順序的值。它應該讀了17,30不是30,17。請再次檢查我原來的帖子,結果是正確的,我的例子是錯的。 – bikey77

+0

樣本數據可以在這裏找到http://www.megaupload.com/?d=AM85UQFY – bikey77