2013-04-04 34 views
3

我在SQL一个完整的新手,所以请温柔不同领域的价值在一个表上改变字段的值...SQL代码基于在不同的表

我的产品数据库。我想根据产品标题中是否存在某个特定字词,以及仅在产品数量为零时使用SQL将一批产品移动到其他类别。

该数据库包括2个相关的表:

  • 第一表是products具有这2个相关列:products_quantitymaster_categories_id

  • 第二表是products_description,它有相应列products_name(标题)

因此,例如,产品wi日以下标题(存储在列products name):

Archimede Seguso Murano Incalmo Millefiori Glass Bowl 

我想的SQL代码可找到此产品(包含在标题中注明Archimede任何任何其他人),检查库存数量0 ,如果是这样,请将这些产品的列master_categories_id的值更改为277

我迄今拿出的代码是:

UPDATE products 
SET master_categories_id = '277' 
WHERE products_quantity = '0' and products_name = 'Archimede'; 

然而,这不起作用作为列products_name不在products表。我花了很多时间寻找这样做的正确方法,没有运气,并会永远感激任何帮助!

我的网站是使用zencart构建的,上述SQL是使用Zen Carts Admin“SQL Query Executor”运行的,但是如果有帮助,我也可以使用phpMyAdmin运行SQL。我正在使用MySQL版本5.

对不起,如果我遗漏了任何明显需要知道的东西,就像我说的我是一个完全新手,但我会尽力提供您需要的任何其他信息。提前致谢!

+0

应该有一些常见的问题,将一张表中的产品与另一张表关联起来。没有这个,你就无法前进。 – harsh 2013-04-04 11:19:42

回答

2

假设你有两个表,你可以使用它来加入的产品ID列,您需要连接表做UPDATE

UPDATE products p 
INNER JOIN products_description pd 
    on p.product_id = pd.product_id 
SET p.master_categories_id = '277' 
WHERE p.products_quantity = '0' 
    and pd.products_name = 'Archimede'; 

如果要更新包含Archimede任何行,那么你将不得不使用LIKE运营商在SQL:

UPDATE products p 
INNER JOIN products_description pd 
    on p.product_id = pd.product_id 
SET p.master_categories_id = '277' 
WHERE p.products_quantity = '0' 
    and pd.products_name LIKE '%Archimede%'; 

LIKE操作者会发现,含有Archimede在标题任何行。

+0

绝对在正确的轨道上(必须将“product_id”更改为“products_id”),但现在很明显有第三个表也需要更改: 表名:“products_to_categories”。 2个字段:“products_id”和“categories_id”。 该表中的“categories_id”字段也需要更改为与“master_categories_id”相同的编号(例如277)。对不起,没有意识到这一点,并非常感谢迄今的帮助! – 2013-04-04 14:46:36

+0

@WayneStephens那么需要在不同的表中更改类别ID? – Taryn 2013-04-04 14:50:33

+0

是的,第三张名为“products_to_categories”的表格。我不知道如何连接3个表格(在你的帮助之前,我不知道如何连接2个表格),但现在我已经通过在第一个脚本之后运行以下脚本来解决它: 'UPDATE products_to_categories pc INNER JOIN产品p 上一个pc.products_id = p.products_id SET pc.categories_id ='277' WHERE p.master_categories_id ='277';' – 2013-04-04 15:07:32

相关问题