mysql - 使用查询结果更新表

标签 mysql sql

在 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

关于mysql - 使用查询结果更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43598080/

相关文章:

MySQL触发器将多个字符串连接成一个变量

php - #1064 mysql语法错误

sql - 将计数追加为表列

c# - MySql - 多线程软件,如何锁定行以防止其他线程读取

python - 将列表值插入不同的行,同时保留其他列的最新值

php - MySQL 大圆距离(Haversine 公式)

mysql - SQL,检索所有项目,即使它没有任何匹配的外部行

mysql - MySQL 中的多个多对多关系场景

PHP用数组插入sql

mysql - 至少一个 X 但没有 Ys 查询