用于根据不同表中的不同字段的值更改一个表上的字段值的SQL代码

时间:2013-04-04 11:16:58

标签: mysql sql

我是SQL的新手,所以请保持温和......

我有一个产品数据库。我想使用SQL将一批产品移动到另一个类别,具体取决于产品标题中是否存在特定单词,以及仅当产品数量为零时。

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

  • 第一个表格为products,其中包含以下两个相关列:products_quantitymaster_categories_id

  • 第二个表格为products_description,其中包含相关列products_name(标题)

因此,举例来说,产品具有以下标题(存储在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。

很抱歉,如果我遗漏了你需要知道的任何明显的东西,就像我说我是一个完整的新手,但我会尝试提供你需要的任何其他信息。提前谢谢!

1 个答案:

答案 0 :(得分:2)

假设您在两个表中都有一个可用于JOIN的产品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的任何行,则必须在SQL中使用LIKE运算符:

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的所有行。