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 Update - Fatal编程技术网

Mysql SQL使用多个条件更新多表

Mysql SQL使用多个条件更新多表,mysql,sql-update,Mysql,Sql Update,我有MySQL数据库,我想更新stock.qty+empiresobjects.food如果对象。product=stock.product和stock.qty-objects.consume for stock.product=objects.consumer如果只有stock.qty>objects.consumer 经验对象 CREATE TABLE `empiresobjects` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `emp

我有MySQL数据库,我想更新stock.qty+empiresobjects.food如果对象。product=stock.product和stock.qty-objects.consume for stock.product=objects.consumer如果只有stock.qty>objects.consumer

经验对象

CREATE TABLE `empiresobjects` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`empireid` int(10) unsigned NOT NULL,
`starts` int(7) NOT NULL,
`ends` int(7) NOT NULL,
`status` tinyint(3) unsigned NOT NULL DEFAULT '0',
`objectid` int(10) unsigned NOT NULL,
`level` tinyint(3) unsigned NOT NULL DEFAULT '1',
`x` varchar(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0.00',
`y` varchar(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0.00',
`r` smallint(5) DEFAULT '0',
`z` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `starts` (`starts`),
KEY `ends` (`ends`),
KEY `status` (`status`),
KEY `FK_cityid` (`empireid`),
KEY `FK_objectid` (`objectid`),
KEY `level` (`level`) USING BTREE,
CONSTRAINT `FK_objectid` FOREIGN KEY (`objectid`) REFERENCES `objects` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=461 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
股票

我使用2个更新语句:

update stock s
,(SELECT sum(objects.consume*empiresobjects.level) as food,objects.consumable,empiresobjects.empireid FROM empiresobjects,objects where status=1 and objects.productive=1 and empiresobjects.objectid=objects.id group by empiresobjects.empireid,objects.consumable) ef
,(select sum(objects.param0) as size,empiresobjects.empireid from objects,empiresobjects where objects.id=empiresobjects.objectid and objects.class='stock' group by empiresobjects.empireid) es
,(select sum(objects.food*empiresobjects.level) as food,empiresobjects.empireid from objects,empiresobjects where objects.id=empiresobjects.objectid group by empiresobjects.empireid) etf
,(select sum(qty) as qty,empireid from stock group by empireid) ets
set s.qty=s.qty-ef.food
where s.qty>ef.food and es.size>etf.food+ets.qty and s.product=ef.consumable and s.empireid=ef.empireid and s.empireid=es.empireid and s.empireid=etf.empireid and s.empireid=ets.empireid;

update stock s
,(SELECT sum(objects.food*empiresobjects.level) as food,sum(objects.consume*empiresobjects.level) as consume,objects.product,objects.consumable,empiresobjects.empireid FROM empiresobjects,objects where status=1 and objects.productive=1 and empiresobjects.objectid=objects.id group by empiresobjects.empireid,objects.product) ef
,(select sum(objects.param0) as size,empiresobjects.empireid from objects,empiresobjects where objects.id=empiresobjects.objectid and objects.class='stock' group by empiresobjects.empireid) es
,(select sum(objects.food*empiresobjects.level) as food,empiresobjects.empireid from objects,empiresobjects where objects.id=empiresobjects.objectid group by empiresobjects.empireid) etf
,(select sum(qty) as qty,empireid from stock group by empireid) ets
,(select qty as qty,product,empireid from stock) ec
set s.qty=s.qty+ef.food
where ec.empireid=s.empireid and ef.consumable=ec.product and ef.consume<s.qty and es.size>etf.food+ets.qty and s.product=ef.product and s.empireid=ef.empireid and s.empireid=es.empireid and s.empireid=etf.empireid and s.empireid=ets.empireid;

它们可以工作,但无法检查stock.qty>empiresobjects.consumer是否有效,因此如果stock.qty字段,我会得到负有效值。

您已经显示了您的表,但没有显示您的查询以尝试执行您想要的任务。你能发布代码并显示结果吗?我编辑了问题并把代码
CREATE TABLE `stock` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`empireid` int(10) DEFAULT NULL,
`product` varchar(25) DEFAULT NULL,
`qty` int(10) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `qty` (`qty`),
KEY `empireid` (`empireid`)
) ENGINE=InnoDB AUTO_INCREMENT=125 DEFAULT CHARSET=utf8mb4;
update stock s
,(SELECT sum(objects.consume*empiresobjects.level) as food,objects.consumable,empiresobjects.empireid FROM empiresobjects,objects where status=1 and objects.productive=1 and empiresobjects.objectid=objects.id group by empiresobjects.empireid,objects.consumable) ef
,(select sum(objects.param0) as size,empiresobjects.empireid from objects,empiresobjects where objects.id=empiresobjects.objectid and objects.class='stock' group by empiresobjects.empireid) es
,(select sum(objects.food*empiresobjects.level) as food,empiresobjects.empireid from objects,empiresobjects where objects.id=empiresobjects.objectid group by empiresobjects.empireid) etf
,(select sum(qty) as qty,empireid from stock group by empireid) ets
set s.qty=s.qty-ef.food
where s.qty>ef.food and es.size>etf.food+ets.qty and s.product=ef.consumable and s.empireid=ef.empireid and s.empireid=es.empireid and s.empireid=etf.empireid and s.empireid=ets.empireid;

update stock s
,(SELECT sum(objects.food*empiresobjects.level) as food,sum(objects.consume*empiresobjects.level) as consume,objects.product,objects.consumable,empiresobjects.empireid FROM empiresobjects,objects where status=1 and objects.productive=1 and empiresobjects.objectid=objects.id group by empiresobjects.empireid,objects.product) ef
,(select sum(objects.param0) as size,empiresobjects.empireid from objects,empiresobjects where objects.id=empiresobjects.objectid and objects.class='stock' group by empiresobjects.empireid) es
,(select sum(objects.food*empiresobjects.level) as food,empiresobjects.empireid from objects,empiresobjects where objects.id=empiresobjects.objectid group by empiresobjects.empireid) etf
,(select sum(qty) as qty,empireid from stock group by empireid) ets
,(select qty as qty,product,empireid from stock) ec
set s.qty=s.qty+ef.food
where ec.empireid=s.empireid and ef.consumable=ec.product and ef.consume<s.qty and es.size>etf.food+ets.qty and s.product=ef.product and s.empireid=ef.empireid and s.empireid=es.empireid and s.empireid=etf.empireid and s.empireid=ets.empireid;
update stock ps
,(select stock.empireid,stock.qty,sum(objects.food*empiresobjects.level) as produce,sum(objects.consume*empiresobjects.level) as consume,objects.product,objects.consumable from stock,objects,empiresobjects where stock.empireid=empiresobjects.empireid and objects.id=empiresobjects.objectid and empiresobjects.status=1 and objects.productive=1  and stock.product=objects.consumable group by stock.empireid,objects.product,objects.consumable)  d
,(select sum(objects.param0) as size,empiresobjects.empireid from objects,empiresobjects where objects.id=empiresobjects.objectid and objects.class='stock' group by empiresobjects.empireid) es
,(select sum(qty) as qty,empireid from stock group by empireid) ets
set ps.qty=ps.qty-d.consume
where ps.empireid=d.empireid and ps.empireid=es.empireid and ps.empireid=ets.empireid and ps.product=d.consumable
and d.qty>d.consume and es.size>ets.qty+d.produce;

update stock ps
,(select stock.empireid,stock.qty,sum(objects.food*empiresobjects.level) as produce,sum(objects.consume*empiresobjects.level) as consume,objects.product,objects.consumable from stock,objects,empiresobjects where stock.empireid=empiresobjects.empireid and objects.id=empiresobjects.objectid and empiresobjects.status=1 and objects.productive=1  and stock.product=objects.consumable group by stock.empireid,objects.product,objects.consumable)  d
,(select sum(objects.param0) as size,empiresobjects.empireid from objects,empiresobjects where objects.id=empiresobjects.objectid and objects.class='stock' group by empiresobjects.empireid) es
,(select sum(qty) as qty,empireid from stock group by empireid) ets
set ps.qty=ps.qty+d.produce
where ps.empireid=d.empireid and ps.empireid=es.empireid and ps.empireid=ets.empireid and ps.product=d.product
and d.qty>d.consume and es.size>ets.qty+d.produce;