Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 基于不同表中不同字段的值更改一个表中字段值的SQL代码_Mysql_Sql - Fatal编程技术网

Mysql 基于不同表中不同字段的值更改一个表中字段值的SQL代码

Mysql 基于不同表中不同字段的值更改一个表中字段值的SQL代码,mysql,sql,Mysql,Sql,我是SQL的新手,所以请温柔一点 我有一个产品数据库。我想使用SQL将一批产品移动到不同的类别,这取决于产品标题中是否存在特定的单词,并且仅当产品数量为零时 该数据库包括2个相关表: 第一个表是products,它有两个相关列:products\u quantity和master\u categories\u id 第二个表是products\u description,它有相关列products\u name(标题) 例如,具有以下标题的产品(存储在products name列中): 我希

我是SQL的新手,所以请温柔一点

我有一个产品数据库。我想使用SQL将一批产品移动到不同的类别,这取决于产品标题中是否存在特定的单词,并且仅当产品数量为零时

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

  • 第一个表是
    products
    ,它有两个相关列:
    products\u quantity
    master\u categories\u id

  • 第二个表是
    products\u description
    ,它有相关列
    products\u name
    (标题)

例如,具有以下标题的产品(存储在
products name
列中):

我希望SQL代码能够找到此产品(标题中包含单词
阿基米德
的任何其他产品),检查库存量是否为
0
,如果是,请将这些产品的
master\u categories\u id
列的值更改为
277

到目前为止,我提出的代码是:

UPDATE products
SET master_categories_id = '277'
WHERE products_quantity = '0' and products_name = 'Archimede';
但是,这不起作用,因为
products\u name
列不在
products
表中。我花了很多时间寻找正确的方法来做这件事,没有运气,并将永远感谢任何帮助

我的网站是使用zencart构建的,上面的SQL是使用zencart管理员“SQL查询执行器”运行的,但是如果有帮助的话,我也可以使用phpMyAdmin运行SQL。我使用的是MySQL版本5


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

假设两个表中都有一个products id列可用于联接,则需要联接这些表以执行
更新

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';
如果要更新包含
阿基米德
的任何行,则必须在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
操作符将在标题中查找包含
阿基米德的任何行

应该有一些将一个表中的产品与另一个表中的产品关联起来的公共字段。如果没有这一点,你就无法继续前进。这肯定是正确的(必须将“product\u id”更改为“products\u id”),但现在很明显,还有第三个表也需要更改:表名:“products\u to\u categories”。2个字段:“产品标识”和“类别标识”。该表中的“类别id”字段也需要更改为与“主类别id”相同的数字(如277)。很抱歉之前没有意识到这一点,非常感谢迄今为止的帮助@WayneStephens那么需要在另一个表中更改的类别id是吗?是的,第三个表名为“products\u to\u categories”。我不知道如何连接3个表(在您的帮助之前,我不知道如何连接2个表),但现在我已经在第一个脚本之后运行了以下脚本:
updateproducts\u to\u categories pc internal join products p on pc.products\u id=p.products\u id SET pc.categories\u id='277',p.master\u categories\u id='277'
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%';