我是SQL的新手,所以请保持温和......
我有一个产品数据库。我想使用SQL将一批产品移动到另一个类别,具体取决于产品标题中是否存在特定单词,以及仅当产品数量为零时。
该数据库包括2个相关表格:
第一个表格为products
,其中包含以下两个相关列:products_quantity
和master_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。
很抱歉,如果我遗漏了你需要知道的任何明显的东西,就像我说我是一个完整的新手,但我会尝试提供你需要的任何其他信息。提前谢谢!
答案 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
的所有行。