Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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-如果其中一行包含值,则更新一系列分组行(如果只有一个产品在库存中,则将所有产品设置为活动)_Mysql - Fatal编程技术网

MySQL-如果其中一行包含值,则更新一系列分组行(如果只有一个产品在库存中,则将所有产品设置为活动)

MySQL-如果其中一行包含值,则更新一系列分组行(如果只有一个产品在库存中,则将所有产品设置为活动),mysql,Mysql,我在寻找这个问题的简明答案。我正在尝试更新产品表中的大量行。当前只有库存项目设置为活动。我希望创建一个快速语句,将具有相同“linked_id”的任何其他语句设置为active而不是deleted。到目前为止,我已经做到了: UPDATE products SET active=1, deleted=0 WHERE stock>=1 OR warehouse_stock>=1 GROUP BY linked_id 显然,这不会起作用,因为在update语句中不能分组依据 您可以通

我在寻找这个问题的简明答案。我正在尝试更新产品表中的大量行。当前只有库存项目设置为活动。我希望创建一个快速语句,将具有相同“linked_id”的任何其他语句设置为active而不是deleted。到目前为止,我已经做到了:

UPDATE products
SET active=1, deleted=0
WHERE stock>=1
OR warehouse_stock>=1 
GROUP BY linked_id

显然,这不会起作用,因为在update语句中不能
分组依据

您可以通过自连接来完成:

UPDATE products p INNER JOIN products pp
ON pp.linked_id = p.linked_id
SET p.active = 1, p.deleted = 0
WHERE (p.active = 0 OR p.deleted = 1) AND (pp.stock >= 1 OR pp.warehouse_stock >= 1)
我猜要更新的行的条件是:

p.active = 0 OR p.deleted = 1

请参阅Thnks获得回复-这杀死了我的MySQL数据库。也许product表中的300000个条目……我猜
linked\u id
已经被索引(如果不是的话,它应该被索引)。另一种选择是将WHERE子句的条件放在ON子句中。但在任何情况下,都不会显示在这些条件下从300000行更新所选行的快速语句。