繁体   English   中英

使用查询结果更新表

[英]Updating a table using query result

在一个MySQL数据库中,我有下表

CREATE TABLE `store` (
  `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `storetypeID` int(10) unsigned NOT NULL,
  `storename` varchar(100) NOT NULL,
  `VATnumber` char(9) NOT NULL,
  `visits` int(10) unsigned DEFAULT '0000000000',
  PRIMARY KEY (`ID`),
  UNIQUE KEY `ID_UNIQUE` (`ID`),
  UNIQUE KEY `VATnumber_UNIQUE` (`VATnumber`),
  KEY `storeID_idx` (`storetypeID`),
  CONSTRAINT `storeID` FOREIGN KEY (`storetypeID`) REFERENCES `storetype` (`ID`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=947 DEFAULT CHARSET=utf8;

CREATE TABLE `expenses` (
  `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `storeID` int(10) unsigned DEFAULT NULL,
  `expensedate` date NOT NULL,
  `amount` decimal(10,2) NOT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `ID_UNIQUE` (`ID`),
  KEY `storeID_idx` (`storeID`),
  CONSTRAINT `storeIDidx` FOREIGN KEY (`storeID`) REFERENCES `store` (`ID`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=7502 DEFAULT CHARSET=utf8;

使用以下查询,我可以获得每个商店的费用数。

SELECT COUNT(*) AS visits, storeID FROM taxfriend.expenses GROUP BY storeID ORDER BY visits desc

有了这个结果,我想用查询的字段访问来更新表存储中的字段访问。 一种选择是编写一个小的子例程(例如,使用VB)。

有什么方法可以在MySQL中创建UPDATE查询来完成此操作吗?

您可以在UPDATE查询中使用JOIN

UPDATE store AS s
JOIN (SELECT COUNT(*) AS visits, storeID 
      FROM taxfriend.expenses 
      GROUP BY storeID) AS e
ON s.ID = e.storeID
SET s.visits = e.visits

使用joinupdate

update store s join
       (SELECT COUNT(*) AS visits, storeID
        FROM taxfriend.expenses
        GROUP BY storeID
       ) sv
       on sv.storeId = s.id
    set s.visit = sv.visits;

但是,这只会将值更新一次到当前数字。 为了使值保持最新,您需要使用触发器。

这就是为什么通常最好动态计算这些值。 当然,如果您的访问量表确实很大,那么触发器可能是保持价值最新的最佳方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM