3

我是 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。

抱歉,如果我遗漏了您需要知道的任何明显内容,例如我说我是一个完全的新手,但我会尽力提供您需要的任何其他信息。提前致谢!

4

1 回答 1

2

假设您在两个表中都有一个产品 id 列可用于 JOIN,您将需要 JOIN 表来执行以下操作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在标题中的任何行。

于 2013-04-04T11:21:01.797 回答