2011-09-08 85 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